单片机学习小组
直播中

张勇

7年用户 1482经验值
私信 关注

C语言中的指针与数组分别有哪些作用呢

C语言中的指针与数组分别有哪些作用呢?

回帖(1)

黄明谊

2022-2-25 15:09:31
#define SIZE 10
int arry[SIZE]={0,1,2,3,4,5,6,7,8,9}; //数组名arry表示数组首元素的地址
*int p,temp;

//可直接初始化定义指针:int *p=arry;

//通俗理解就是对指针进行初始化,将指针p指向数组首元素地址,这一地址中存放着一个int类型的数值

p=arry; //将数组首原始地址赋予指针p,==&arry[0]

arry+1; //表示地址加4个字节,即指下一个数组元素arry[1]地址,即&arry[1]

p+1; //等效arry+1

*p==arry==(&arry[0]); //*表示解引用,*p==arry[0],即指向存放在&arry[0]上的值

*p+1==arry+1==(&arry[0])+1 //表示arry[0]+1,*的优先级大于+

(p+1)==(arry+1)==(&arry[1])* //表示arry[1],数组首元素地址(&arry[0])加4个字节指向下一个元素的地址,对其接引用

temp=*p++; //表示先对p的接引用的值(arry[0])赋值给temp,后p地址自增再对其解引用(arry[1])赋值给temp

*函数中的指针:
double show_arry(int arry[])==double show_arry(int p)
调用这个函数方式:show_arry(arry);
指针表示法和数组表示法是等同的:
p[0]=arry[0]=0;
p[5]=arry[5]=5;


指针与多维数组:
int arry[4][2]={{1,2},{3,4},{5,6},{7,8}}; //二维数组是由4个一维数组组成的,其中一个一维数组包含2个int类型元素

int *p;

arry //arry表示的是二维数组中的首元素(也就是第一个一维数组,其中包含两个元素)地址(&arry[0]),也就是说arry包含两个int类型元素;准确的说就是arry与&arry0是相等的,可以把arry理解为二维数组的数组名

arry[0] //arry[0]表示第一个一维数组首元素的地址(&arry[0][0]),可以把arry[0]理解为第一个一维数组的数组名

//之所以说arry的值与arry[0]的值相等是因为两个首元素地址都是&arry[0][0],都是从这个开始所以两者的值是相等的

arry[0]==&arry[0][0] //arry[0]是一维数组的数组名,一维数组首元素的地址

*arryarry[0]&arry[0][0] //arry表示(&arry[0])

**arry==arry[0]==(&arry[0][0])==arry[0][0] //arry是指向arry[0]的地址(&arry[0]),其中存放的是arry[0],*arry指向arry[0][0]的地址(&arry[0][0],**arry是对arry[0]的解引用等于arry[0][0])

//特别要注意理解arry、arry[0]、&arry[0][0]之间的关系
arry==&arry[0],但是arry的值和arry[0]是相等的因为都是从同一个地址开始的,其中arry[0]&arry[0][0],*arryarry[0],**arry==arry[0][0]。

arry+1和arry[0]+1不一样,其中arry+1是表示增加2个int,arry[0]是表示增加1个int;

arry+1 //表示的是第二个一维数组首元素(arry[1])的地址(&arry[1])

arry[0]+1 //表示的是第一个一维数组首元素地址加1指向第二元素地址(&arry[0][1])

*arry+1=arry[0]+1==&arry[0][1]

指针与多维数组:
int (p)[2] //表示一个p指向一个内含两个int类型值的数组,其中[]的优先级大于所以加()

pz=arry;
指针表示法与数组表示法关系*((p+2)+1)=p[2][1]=6 arry[m][n]==((arry+m)+n) p[m][n]==(*(p+m)+n); //可用数组or指针表示

int **pz //表示指向指针的指针,它指向的指针指向int。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分