指针数组问题
int a[]={2,4,6,8,10,12,14,16,18,20,22,24},*q,k;for(k=0;k<4;k++) q=&a;
printf("%d\n",q);
A 8
B 16
C 20
D 输出项不合法
答案C,请问q什么意思,如何理解 本帖最后由 sunrise085 于 2020-3-17 15:47 编辑
*q是一个指针数组。
for循环是给*q进行初始化。
循环结束后,指针q指向a即2,指针q指向a即8,指针q指向a即14,指针q指向a即20。
这里是把指针用数组的型式表示,q就是a,q就是a
数组是顺序表示的。q、q、q和q都表示a q是一个存有4个指针的指针数组
执行完for语句之后
q指向a
q指向a
q指向a
q指向a
通俗点说就是吧a分为四个长度为3的一位数组,又分别用4个指针指向这4个一维数组
q就是调用第4个一维数组的第一个元素的意思
我是这样理解的,执行完循环以后,k=3,q=&a; //是值为20的地址
a = *(*(a+i)+j) q = *(q+0)=*(q),所以等于20
不知道对不对 sunrise085 发表于 2020-3-17 15:28
*q是一个指针数组。
for循环是给*q进行初始化。
循环结束后,指针q指向a即2,指针q指向a[ ...
可是q是个一维指针数组,为什么可以用二维的来表示,还不出错 张世来4610484 发表于 2020-3-17 15:56
可是q是个一维指针数组,为什么可以用二维的来表示,还不出错
你不要把它们想想的这么麻烦。不管什么一维二维。
单独看一个就可以了。举个例子,q是一个指针,指向了a。那么就可以用q家下表的型式表示从a开始的各个变量,q表示a,q表示a,q表示a,以此类推。
所谓数组只是把一组数放在一起而已。一维数组,把每一个单独拿出来就是一个该类型的变量;二维数组,拆开之后就是多个一维数组,例如:int b;单独看b不就是一个一维数组么? sunrise085 发表于 2020-3-17 16:11
你不要把它们想想的这么麻烦。不管什么一维二维。
单独看一个就可以了。举个例子,q是一个指针,指向 ...
但是照你这么想的话,没有给q定义二维数组,就用二维输出,题目给的a是一维数组,要是在最后
输出个a,就会报错,题目上这种用法我从来没在书上见过,但是试了一下又可以运行 张世来4610484 发表于 2020-3-17 20:53
但是照你这么想的话,没有给q定义二维数组,就用二维输出,题目给的a是一维数组,要是在最后
输出个a ...
。。。。。。
一维数组的数组名有时候可以和指针换着用。若a是一维数组,那么a就是确定的变量咯,怎么可能再有下标啊。
你所谓的题目上的这种写法,你是不是没有看到&符号啊
q=&a,这是把int类型的变量a的地址赋值给int类型的指针q,而不是把a赋值给q,也就是说q存放的是地址,这和把一个一维数组名赋给指针(q=a)不是一样的吗?
算了不和你争辩了。你若还是不理解那就找你的老师去问问吧。我是不知道该怎么解释了 本帖最后由 4goodworld 于 2020-3-18 21:14 编辑
int main() {
int a[] = { 2,4,6,8,10,12,14,16,18,20,22,24 };
int*q;
int k;
for (k = 0; k < 4; k++) {
q = &a ;
}
/*
k=0
q={2,4,6……,24}
k=1
q={8,10,12……,24}
k=2
q={14,16,18……,24}
k=3
q={20,22,24}
*/
printf("%d\n", q);
return 0;
}
这个我感觉最关键的是理解
指针=数组取地址
所以q是一个指针数组(数组元素全为指针变量的数组称为指针数组)
而a很明确就是一个int类型数组,请不要混淆
q什么样子与a没有半毛钱关系
sunrise085 发表于 2020-3-17 21:33
。。。。。。
一维数组的数组名有时候可以和指针换着用。若a是一维数组,那么a就是确定的变量咯,怎 ...
我还是不能理解q为什么可以这么写,,,我太难了 张世来4610484 发表于 2020-3-18 11:34
我还是不能理解q为什么可以这么写,,,我太难了
去学汇编语言 https://zhidao.baidu.com/question/1304089356848302819.html 张世来4610484 发表于 2020-3-17 15:56
可是q是个一维指针数组,为什么可以用二维的来表示,还不出错
因为在你定义一个数组的时候,例如;int a[] = {1, 2, 3, 4, 8};
int* p = a;
数组名a的值是数组的首地址,也就是a的地址。而指针变量的值也是地址。只要它们两个的类型是一样的,比如都是int型。同时p等同于a;p等同于a
在程序执行的过程中,其实就是通过首地址a,自增i,来找到数组下标i所在内存单元,并取出值的,跟指针没有什么本质区别。 4goodworld 发表于 2020-3-17 21:44
这个我感觉最关键的是理解
指针=数组取地址
所以q是一个指针数组(数组元素全为指针变量的数组称为 ...
不是你代码注释上面写的东西,指针变量的值就是一个地址,q仅仅是告诉了你首地址,但是并没有告诉你它的长度,也就意味着q并不是等于{2, 4, 6},输出q,甚至q[-1]一点问题都没有。这也是为什么在使用数组或者是指针变量指向数组的时候,要注意检查是否越界的原因。一般编译器并不会帮你检查 村上猫 发表于 2020-3-18 20:27
不是你代码注释上面写的东西,指针变量的值就是一个地址,q仅仅是告诉了你首地址,但是并没有告诉你它 ...
你说得有道理,确实应该改下
页:
[1]