早教吧作业答案频道 -->其他-->
《c和指针》中一道题的疑惑原题如下“下面的声明取自某个源文件:inta[10];//在该源文件中定义数组;int*b=a;//在该源文件中定义指针b,且让其指向数组a的首地址。但在另一个不同的
题目详情
《c和指针》中一道题的疑惑
原题如下
“ 下面的声明取自某个源文件:
int a[10]; // 在该源文件中定义数组;
int *b = a; // 在该源文件中定义指针b,且让其指向数组a的首地址。
但在另一个不同的源文件中,却发现了这样的代码:
extern int *a; // 声明指针a全局化,即为上个源文件的a[];
extern int b[];// 声明指针b[]全局化,即为上个源文件的b;
int x, y; // 假设a处的地址为1234.
...
x = a[3];// x等于地址为1234+12处的存储值;
y = b[3];//y等于地址为1234+12处的存储值。
请解释一下,当两条赋值语句执行时会发生什么?(假定整形和指针长度都是4个字节。”
上面//后的解释是我自己加上的,请问上面解释有问题吗?如果没有问题,则x和y应该是一样的啊,为什么该题的解释是不一样的,说了很长一段,但最后还是不知所云。原来的该题解释如下:
“在第一个赋值中,编译器认为a是一个指针变量,所以它提取存储在那里的的指针值,并加上12,(3和整形的长度相乘),然后对这个结果执行间接访问操作。但a实际上是整形数组的起始位置,所以作为”指针“获得的这个值实际上是数组的第一个整形元素,它与12相加,其结果解释为一个地址,然后对它进行间接访问。作为结果,它或者将提取一些任意内存位置的内容,或者由于某种地址错误而导致的程序失败。
在第二个赋值中,编译器认为b是个数组名,所以它吧12(3的调整结果)加到b的存储地址,然后间接访问操作从哪里获得值。事实上,b是个指针变量,所以从内存中提取的后面三个字实际上是从另外的任意变量中取得。这个问题说明了指针和数组虽然存在关联,但绝对不是相同的。”
原题如下
“ 下面的声明取自某个源文件:
int a[10]; // 在该源文件中定义数组;
int *b = a; // 在该源文件中定义指针b,且让其指向数组a的首地址。
但在另一个不同的源文件中,却发现了这样的代码:
extern int *a; // 声明指针a全局化,即为上个源文件的a[];
extern int b[];// 声明指针b[]全局化,即为上个源文件的b;
int x, y; // 假设a处的地址为1234.
...
x = a[3];// x等于地址为1234+12处的存储值;
y = b[3];//y等于地址为1234+12处的存储值。
请解释一下,当两条赋值语句执行时会发生什么?(假定整形和指针长度都是4个字节。”
上面//后的解释是我自己加上的,请问上面解释有问题吗?如果没有问题,则x和y应该是一样的啊,为什么该题的解释是不一样的,说了很长一段,但最后还是不知所云。原来的该题解释如下:
“在第一个赋值中,编译器认为a是一个指针变量,所以它提取存储在那里的的指针值,并加上12,(3和整形的长度相乘),然后对这个结果执行间接访问操作。但a实际上是整形数组的起始位置,所以作为”指针“获得的这个值实际上是数组的第一个整形元素,它与12相加,其结果解释为一个地址,然后对它进行间接访问。作为结果,它或者将提取一些任意内存位置的内容,或者由于某种地址错误而导致的程序失败。
在第二个赋值中,编译器认为b是个数组名,所以它吧12(3的调整结果)加到b的存储地址,然后间接访问操作从哪里获得值。事实上,b是个指针变量,所以从内存中提取的后面三个字实际上是从另外的任意变量中取得。这个问题说明了指针和数组虽然存在关联,但绝对不是相同的。”
▼优质解答
答案和解析
解释很深刻,受教了
你多看几遍就明白了,这个没法再解释了
你多看几遍就明白了,这个没法再解释了
看了《c和指针》中一道题的疑惑原题...的网友还看了以下:
一个概率+逻辑三个门,分为ABC,其中有一扇后面是车,另两扇后面是羊,现在有羊的其中一扇被翻开,这 2020-04-26 …
一物体在几个力共同作用下运动,其运动方程为)(2SIjtitrrrr+=,其中一个力为itFrr5 2020-05-14 …
一道集合的选择题该题已经有答案了,求解题思路.在B中:X小于a.是不是意思是说在B中的这个未知数X 2020-05-16 …
应该如何有条不紊地进行分析?什么隔离法,整体法,我不知道应该什么时候该用哪个,以及,请详细回答标题 2020-06-04 …
一个质量为M的物体受力如下所述,请问该物体在时间T内的位移是多少?为何?一个质量为M物体受到三个水 2020-06-05 …
一个初中生的疑问初中政治到底该怎样学,我今年在初三但对其却一窍不通,尤其是考试时,我分析完材料认为 2020-06-11 …
乙第一轮投中几个甲乙丙丁4名同学组成一队参加投球比赛.第一轮投球,该队投中的平均数是8个;第二轮投 2020-06-15 …
省略号应该写在底下还是格子中间最近在WORD中打文章,突然发现一个问题,倘若我们是在四百格纸上的其 2020-06-30 …
一道实用题!桌子上有8个大小相同的铁球,但是其中一个是有缺陷的,也就是说它比其他的要重,给你一个天平 2020-11-14 …
找次品,快1、如果有12个零件,其中一个是次品,应该怎么分,称的次数最少而且保证能找出次品?2、有7 2020-11-24 …