qhnw.net
当前位置:首页 >> 已知有声明:"int A[3][2]={{1,2},{3,4},{5,6}},*p=A[1... >>

已知有声明:"int A[3][2]={{1,2},{3,4},{5,6}},*p=A[1...

二维数组 6个元素存储空间 依次存储1 2 3 4 5 6p指向a[0]即a[0][0] 1的地址p+4指向之后四个 即5的地址所以*(p+4)输出为5是否有问题? 有问题请追问 没问题请采纳

结果是5,二维数组他们的存储地址是连续的

结果是5,二维数组他们的存储地址是连续的

是2由于*p=a,p指向了a的第一个元素a[0](*++p)++这个先执行++pp指向a[1]*p就是a[2]转化为a[2]++,由于++先算表达式值在自加1,所以这个表达式的值为2

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]是错的.

int a[3][4]={1,2,3,4,5,6,7,8,9};,相当于int a[3][4]={{1,2,3,4},{5,6,7,8},{9,0,0,0}}; 因此,a[1][3]=8, a[2][3]=0;

选择B int *p=&x[2]表示p是一个指向x[2]地址单元的指针,就*p=x[2]=3.所以你要找的是哪一个表达式的意思是:*p.B中 先取值,然后p再++,即输出3,然后p指向&x[3].

错误的是A.它不是元素值,而是元素地址.

选c,p[0]指向a[1],也就是&a[1][0],二维数组在内存中的存储方式和一维数组一样也是顺序存放的,所以p[0]+1就是a[1][0]的下一个元素

对p赋值的是数组a的 始地址,也就是 &a[0], 不是元素值.输出有2种方法:#include <stdio.h>#include <stdlib.h> main() { int a[]={1,2,3,4,5,6}; int *p=a; int i,n; n = sizeof(a)/sizeof(int); for (i=0;i< n ;i++) printf("%d ", p[i]); //输出 printf("\nOr:\n"); for (i=0;i< n;i++) printf("%d ", *(p+i)); // 输出 return 0; }

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.qhnw.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com