www.5213.net > 若int i,(*p)[3],A[][3]={1,2,3,4,5,6,7,8,9,10,11,12}...

若int i,(*p)[3],A[][3]={1,2,3,4,5,6,7,8,9,10,11,12}...

#include<stdio.h> void main() { int a[]={1,2,3,4,5,6,7,8,9,10,11,12};//对数组a初始化 int *p[3];//定义指针数组,每一个元素都是指针 int m;//定义变量m for(m=0;m<3;m++)//循环三次 p[m]=&a[m*4]; /**************开始分析循环语句*****************

(*prt)[3]=a,指向数组a,a[0][0],a[0][1],a[0][2].,a[3][2],指针确实很麻烦..*p=a[0] ;p指向a[0][0],a[0][1],a[0][2] 验证程序如下:#include void main() {int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12} , (*prt)[3]=a, *p=a[0] ; int i; printf("%d\n",*p);//printf("%d\n",*prt

int (*p)[4];表明p是行指针,即p指向二维数组中的一行.p=a;这一句表示p指向a[0],也就是指向a数组第0行的第0个元素(a[0][0])的地址.p[2]表示p指向a数组的第二行,即指向a[2]行,也就指向a[2][0]的地址.p[2]+3表示行指针指向a数组的第二行(从第0行开始),(从0开始)第3个元素,也就是a[2][3],*(p[2]+3)表示第2行,第3个元素的值.p+4表示第四行(从0行开始),因为a数组没有第四行,所以是错的.p[4]表示第四行(从0行开始),原因同上.*p表示a数组第0行,第0列地址,**p表示a[0][0]的值,值不会再包含元素,所以(**p)[2]是错的.

值是9,int a[ ][3]={1,2,3,4,5,6,7,8,9,10,11,12};是定义一个二维数组,他有3列 由后面的十二个元素可知它有4列.int*p=a;是定义一个实数指针, *(*(a+2)+2)就是指数组a[2][2所以是9.(下标从0开始算)]

根据for循环,得知:p[0]=&a[0],p[1]=&a[3],p[2]=&a[6],p[3]=&a[9];*(*(p+1)+2)=a[5]=6;*(p+1)即是数组p[1];内容是数组a的第三单元的地址.*p[2]=a[6]=7;

答案是Dp[ i ]是数组a[ ]的第i+1个元素,&p[ i ] 即取数组a[ ] 的第i + 1个元素的地址,故&p[ i ]表示数组元素地址.A 错,a+1本身就是数组第二个元素的地址,再取地址编译报错B 错,a是数组名,存储在静态区,不能进行自增+

int a[ ][3]={1,2,3,4,5,6,7,8,9,10,11,12}意思就是一个二维数组,后面的3代表列数,也就是一行有3个数.二维数组行数可以不写,但是一定要写列数.&a[1][3]意思是a【1】【3】的地址,再加上* ,表示该地址所致的变量的数值,也就是};*(&a[1][3])=a【1】【3】.

相关搜索:

网站地图

All rights reserved Powered by www.5213.net

copyright ©right 2010-2021。
www.5213.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com