俩道指针选择题求帮助
对语句“int a,*p=a;”,下列表述中哪一个是正确的 。A、*p被赋初值为a数组的首地址 B、*p被赋初值为数组元素a的地址
C、p被赋初值为数组元素a的地址 D、p被赋初值为数组元素a的地址
数组定义为“int a;”,引用“a+3”表示 。
A、a数组第4列的首地址 B、a数组第1行第4列元素的值
C、a数组第4行的首地址 D、a数组第1列第4行元素的值
因为就学了半个月c语言,基础有点不太牢靠,
想问一下,第一题选择D而不是选择A的原因是什么,有点没明白概念
和第二题选C而不选B,是否是因为引用这个词和&这个取值符号是类似的意思呢
不是很能明白指针的这些地方,希望大佬们能教一下我呜呜呜,不然只能死记硬背把题型记下了
数组名是数组第0个元素的地址
a + 3 就是 &a
第3行第0列
*p *代表取值运算符嘛 所以*p不是地址
第二个的话:a+3就是代表二维数组加3行,这种的是代表加行
还有一种是a+3-->是a因为a代表a 第一道题目解答:
第一道题目涉及运算符号的重载,*在C语言中有3个含义,分别为:对于两个常数的乘法运算、对指针变量的取值运算(实际上是解引用,取指针所指向的那片内存空间)、以及在变量声明时定义指针类型。所以在题目的选项中*号是取值运算符,A选项中的*p的含义是取指针变量p的内存地址所指向的值,即 *p == a;而p中自然是a的地址。
第二题解答:
第二道题涉及数组的指针和指针数组(这边容易混淆,建议多多查阅相关资料),int a实际上定义的是一个有四个数组指针的指针数组(有点饶,有多种理解方式,可忽略),每个数组指针是一个含有5个元素的一维数组的首地址。a++的含义是移动到下一个一维数组的首地址。同理,a+3的代表的第四个数组的首地址。
可以参阅下图助于理解
人造人 发表于 2021-5-4 22:06
数组名是数组第0个元素的地址
a + 3 就是 &a
第3行第0列
谢谢谢谢 人中仙 发表于 2021-5-5 10:36
第一道题目解答:
第一道题目涉及运算符号的重载,*在C语言中有3个含义,分别为:对于两个常数的乘法运 ...
谢谢谢谢,我琢磨一下,hhhh概念型的东西好容易混淆,淦
页:
[1]