程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 總結了一些指針易出錯的常見問題(二),指針常見問題

總結了一些指針易出錯的常見問題(二),指針常見問題

編輯:C++入門知識

總結了一些指針易出錯的常見問題(二),指針常見問題


4.指針與數組

   一些常見的錯誤觀點是數組和指針是完全可以互換的。盡管數組名字有時候可以當指針來使用,但是數組的名字不是指針。

  數組是能用索引訪問的同質元素連續集合。(連續是指數組的元素在內存中是相鄰的,中間不存在空隙同質是指元素是同一類型)

  指針在處理數組時很有用,既可以用指針指向已有的數組,也可以從堆上分配內存然後把這塊內存當做一個數組使用。

  數組/指針表示法

  給數組地址加1實際加了4,也就是整數的長度。

#include<iostream>
using namespace std;
int main()
{
    int vector[5]={1,2,3,4,5};
    int *pv=vector;
    int value=4;
    for(int i=0;i<5;i++)
    {
        *pv++ *=value;
    }
    pv=vector;
    for (int i=0;i<5;i++)
    cout<<*(pv+i)<<endl;
 } 

  指針和數組的區別

int vector[5]={1,2,3,4,5};
    int *pv=vector;

  vector[i]生成的代碼和*(vector+i)生成的不一樣,vector[i]表示法生成的機器碼從位置vector開始,移動i個位置,取出內容。而*(vector+i)表示法生成的機器碼則是從vector開始,在地址上增加i,然後取出這個地址中的內容。

  sizeof操作符對數組和同一個數組的指針操作也是不同的。

  sizeof(vector)=20;  //數組分配的字節數

  sizeof(pv)=4;           //指針長度

  如果從堆上分配內存並把地址賦給一個指針,那就肯定可以對指針使用數組下標並把這塊內存當成一個數組。

int *pv=(int*) malloc(5*sizeof(int));
    for(int i=0;i<5;i++)
        {
            pv[i]=i+1;
         }
/////////////////////////////////////
  for(int i=0;i<5;i++)
{
  *(pv+i)=i+1;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved