作业帮 > 综合 > 作业

C语言指针部分选择题a[p-a]是什么意思? B是什么意思?麻烦解释详细点

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/06/24 22:01:45
C语言指针部分选择题
a[p-a]是什么意思? B是什么意思?麻烦解释详细点

C语言指针部分选择题a[p-a]是什么意思? B是什么意思?麻烦解释详细点
D是错误的,要弄清楚这个问题,首先我们要知道指针的本质是什么
指针是个存着地址的变量,因为我们每定义一个变量,内存就会给他分配空间,那么每个变量必须会有一个存储他的地方,我们称为地址,他指向谁,里面就存着谁的地址.如题*p=a;
此时p里面存的是数组a的首地址(记住这一点),还可以用取地址符&获取变量的地址,如&a[i];表示的是数组中第i个元素a[i]的地址.变量的值可以用*号获取.* 后面加一个地址,表示这个地址里面的数值(也记住,很重要).开始做题
A中,前面我们已经将p赋值为a的首地址,同理a也可以表示数组的首地址(不知道的话翻书),就是说此时他们的都表示首地址(这是关键),也就是他们的值是一样的,这里*p=a,p-a为0.所以,a[p-a] = a[0];是正确的.
B中,记得前面说过的,取地址符也可以获得地址,那么我们可以知道&a[i],是表示a[i]的地址(不是数值,是地址),这样就很明了了,*(&a[i]),不就是一个* 后面跟一个地址吗?对的,没错,那么他表示的就是地址里面的数据了.因此 B选项就 ,*(&a[i]) =a[i],是正确的
C 你懂的,不懂的话再问我.
我们来说说D
前面我们说过a可以表示数组a的首地址,我们可以通过给地址加1来获取下一个数组中的值,
首先我们用p来表示地址.*p =a ,那么*(p+1) = a[1],*(p+2) = a[2],因此用a也是一样的*(a+1) =a[1]; 同理*(a+i) = a[i], 这个时候你应该知道了.既然a[i]是一个数值,不是一个地址,那么
*(*(a+i)) = *a[i],是没有意义的.是个错误的引用.
祝你进步!