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;
}