static int a[2][3]={1,2,3,4,5,6}; int m, *ptr=&a[0][0]; 执行m=(*ptr)*(*(ptr+2))*(*(ptr+4));后

是这样的,想请讲解下,static int a[2][3]={1,2,3,4,5,6}; int m, *ptr=&a[0][0]; 执行m=(*ptr)*(*(ptr+2))*(*(ptr+4));后
最新回答
一口醉

2024-11-25 07:33:56

答案错了吧。我算的是15,在VC运行的结果也是15.

static int a[2][3]={1,2,3,4,5,6};是定义一个2行3列的静态数组。即a[0][0]=1,a[0][1]=2,a[0][2]=3,a[1][0]=4,a[1][1]=5,a[1][2]=6;

int m, *ptr=&a[0][0]; 是定义了一个整型变量m和一个指针ptr.指针ptr指向a[0][0]。即*ptr=a[0][0]=1,

ptr+2表示指针向后移2,即ptr+2=&a[0][2];则*(ptr+2)=a[0][2]=3;同理ptr+4表示指针向后移4,即ptr+4=&a[1][1];则*(ptr+4)=a[1][1]=5;所以m=(*ptr)*(*(ptr+2))*(*(ptr+4))=1*3*5=15;

雪鬓

2024-11-25 06:36:53

*ptr=a[0][0]=1
*(ptr+2)=a[0][2]=3;
*(ptr+4)=a[1][1]=5
最后结果是15,不是24。我已经跑过一遍,不会错的。
ptr是整个数组的首地址,那么*ptr=a[0][0]是无可争议滴!,接着ptr+2,很明显是a[0][2]的地址,因为
二维数组
在存储的时候是线性存储的,不存在二维,仅仅是逻辑上的二维而已,那么ptr+4其实就是从a[0][0]之后数四个数,那么就得到其是a[1][1]的地址,即是5的地址。
雨不眠的下

2024-11-25 06:36:55

int a[2][3]={1,2,3,4,5,6};
int m, *ptr=&a[0][0]; //ptr指向数组a首位,即1所在位置。
执行m=(*ptr)*(*(ptr+2))*(*(ptr+4));

*ptr=1
*(ptr+2) =3
*(ptr+4) = 5

m=1*3*5=15
结果应该是15
如果输出结果是24,则说明数组中相应的数据发生过变化。
static int a[2][3]={}这种定义时赋初值,只是在第一次函数调用时起作用,第二次调用时,直接使用变量中的值。难道你的程序代码没有表达完整?
追问
代码正确   答案是错误的  谢谢啦!!
抹不掉的痛

2024-11-25 05:04:06

STATIC是静态存储,*PTR是指针的意思,即指向地址的内容,所以你首先要明白数组中的各个地址指向的是什么内容,这个我就不细说了,直接看题,*ptr=1,*(ptr+2)=3,*(ptr+4)=5,那结果应该是15,你的结果一定不对