两个指针变量的关系
本帖最后由 风过无痕1989 于 2020-9-3 10:16 编辑下面这个程序运行是正确的,请帮我将最后两个形式的输出(输出的格式不要改变)中的指针变量 q 改为用指针变量 p 。改得了则改,若改不了,则给出一个结论性的小结
#include <stdio.h>
int main()
{
int a = {1,3,5,7,9,11,13,15,17,19,21,23};
int *p,i,j; // p是int*型整型变量
int (*q); // q是指向包含4个整型元素的一维数组的指针变量
p = a; // p指向0行0列元素地址
q = a; // q指向二维数组的0行
scanf("%d,%d",&i,&j); // 指定要输出的数组的行和列
printf("a[%d,%d] = %d\n",i,j,*(*(a + i) + j)); // 输出指定元素a的值
printf("a[%d,%d] = %d\n",i,j,*(p + i * 4 + j)); // 输出指定元素a的值
printf("a[%d,%d] = %d\n",i,j,*(*(q + i) + j)); // 输出指定元素a的值
return 0;
}
没明白你要改成什么
指针变量 q 改为用指针变量 p
这句是什么意思?
现在你的程序是三中索引方式,第一种是数组名索引,第二种是一维指针索引,第三种是数组指针索引
不知道你要将什么改为什么 sunrise085 发表于 2020-9-3 11:05
没明白你要改成什么
这句是什么意思?
看了你的回复,我似乎明白了点什么,但又说不上来到底是什么 p = a; // p指向0行0列元素地址
q = a; // q指向二维数组的0行
这两个p和q初始值一样,你有考虑过他们偏移一个单位的地址是什么样子吗?
初始值一样,并不代表两者的“意义”一致,充分说明两者指针是不同类型的指针,代表的含义不一样
就像你注释所言的那样 4goodworld 发表于 2020-9-3 14:08
这两个p和q初始值一样,你有考虑过他们偏移一个单位的地址是什么样子吗?
初始值一样,并不代表两者的 ...
初值是一样的,都是指向 a 这个地址,p + 1 指向了 a,指向的是同一行的下一列,而 q + 1 指向了 a ,即指向了下一行的同一列。
代表的意义不一样,就能说明是不同类型的指针吗?若你能证明,是不同类型的指针,也就是我要的答案了 风过无痕1989 发表于 2020-9-3 14:20
初值是一样的,都是指向 a 这个地址,p + 1 指向了 a,指向的是同一行的下一列,而 q + 1 指 ...
如果两个指针类型一样的,偏移同一单位,那么结果应该反馈的地址是一样,我已经测试给你看了,他们偏移长度一样呀?
int*和char*两个不同类型的指针,+1的结果会一样吗? 4goodworld 发表于 2020-9-3 15:16
如果两个指针类型一样的,偏移同一单位,那么结果应该反馈的地址是一样,我已经测试给你看了,他们偏移长 ...
偏移同一单位,不指向同一方向,并不能说明两个指针是不同类型的,正如驶向对岸的船,一面是船的牵引,一面是水流的作用,并不能说明船不是跟水流一样,是均速运行的 风过无痕1989 发表于 2020-9-3 17:08
偏移同一单位,不指向同一方向,并不能说明两个指针是不同类型的,正如驶向对岸的船,一面是船的牵引,一 ...
你以为写科幻小说呢,脑洞怎么开都行。 4goodworld 发表于 2020-9-3 21:25
你以为写科幻小说呢,脑洞怎么开都行。
我是说,你的证据不足以说明它们是不同类型的 sunrise085 发表于 2020-9-3 11:05
没明白你要改成什么
这句是什么意思?
你的回复,使我茅塞顿开,我已经想明白了,我要的结论 高深! 赵二 发表于 2020-9-4 04:45
高深!
没什么高深的。只是将所学到的内容进行归纳、总结,以便于更好的记忆和理解和提高
页:
[1]