指针 数组
回帖(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。
#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。
举报
更多回帖