C语言的指针问题.*(p+i)是代表取值呢还是取地址?
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/12 02:01:37
C语言的指针问题.*(p+i)是代表取值呢还是取地址?
有一二维数组a[3][4]={{56,45,89,90},{13,34,56,45},{65,55,34,68}}
如果我定义指针*P,指向首地址,*(p+i)就能取到数组中的值.
但如果我定义指针(*p)[4],指向首地址,*(p+i)就取不到值了,好像取到的是各行首地址是吧?这是什么原理啊?
我觉的*p和(*p)[4]两种形式都是一个指针吧,那*(p+i)却得到两种不同结果,这要怎么理解啊?
有一二维数组a[3][4]={{56,45,89,90},{13,34,56,45},{65,55,34,68}}
如果我定义指针*P,指向首地址,*(p+i)就能取到数组中的值.
但如果我定义指针(*p)[4],指向首地址,*(p+i)就取不到值了,好像取到的是各行首地址是吧?这是什么原理啊?
我觉的*p和(*p)[4]两种形式都是一个指针吧,那*(p+i)却得到两种不同结果,这要怎么理解啊?
int *p=a
这是定义指针,表示p是a[0][0]的地址,*(p+i)代表的是a[0][i]的值,
int (*p)[4]
定义一个数组指针,*(p+i)就是a[i][0]的地址,*(*(p+i)+j)是a[i][j]这个值
这是定义指针,表示p是a[0][0]的地址,*(p+i)代表的是a[0][i]的值,
int (*p)[4]
定义一个数组指针,*(p+i)就是a[i][0]的地址,*(*(p+i)+j)是a[i][j]这个值