风过无痕1989 发表于 2020-9-3 10:14:19

两个指针变量的关系

本帖最后由 风过无痕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;
}



sunrise085 发表于 2020-9-3 11:05:14

没明白你要改成什么
指针变量 q 改为用指针变量 p
这句是什么意思?
现在你的程序是三中索引方式,第一种是数组名索引,第二种是一维指针索引,第三种是数组指针索引
不知道你要将什么改为什么

风过无痕1989 发表于 2020-9-3 12:03:02

sunrise085 发表于 2020-9-3 11:05
没明白你要改成什么

这句是什么意思?


看了你的回复,我似乎明白了点什么,但又说不上来到底是什么

4goodworld 发表于 2020-9-3 14:08:22

p = a;                                          // p指向0行0列元素地址
    q = a;                                             // q指向二维数组的0行
这两个p和q初始值一样,你有考虑过他们偏移一个单位的地址是什么样子吗?

初始值一样,并不代表两者的“意义”一致,充分说明两者指针是不同类型的指针,代表的含义不一样
就像你注释所言的那样

风过无痕1989 发表于 2020-9-3 14:20:36

4goodworld 发表于 2020-9-3 14:08
这两个p和q初始值一样,你有考虑过他们偏移一个单位的地址是什么样子吗?

初始值一样,并不代表两者的 ...

初值是一样的,都是指向 a 这个地址,p + 1 指向了 a,指向的是同一行的下一列,而 q + 1 指向了 a ,即指向了下一行的同一列。

代表的意义不一样,就能说明是不同类型的指针吗?若你能证明,是不同类型的指针,也就是我要的答案了

4goodworld 发表于 2020-9-3 15:16:03

风过无痕1989 发表于 2020-9-3 14:20
初值是一样的,都是指向 a 这个地址,p + 1 指向了 a,指向的是同一行的下一列,而 q + 1 指 ...

如果两个指针类型一样的,偏移同一单位,那么结果应该反馈的地址是一样,我已经测试给你看了,他们偏移长度一样呀?
int*和char*两个不同类型的指针,+1的结果会一样吗?

风过无痕1989 发表于 2020-9-3 17:08:00

4goodworld 发表于 2020-9-3 15:16
如果两个指针类型一样的,偏移同一单位,那么结果应该反馈的地址是一样,我已经测试给你看了,他们偏移长 ...

偏移同一单位,不指向同一方向,并不能说明两个指针是不同类型的,正如驶向对岸的船,一面是船的牵引,一面是水流的作用,并不能说明船不是跟水流一样,是均速运行的

4goodworld 发表于 2020-9-3 21:25:59

风过无痕1989 发表于 2020-9-3 17:08
偏移同一单位,不指向同一方向,并不能说明两个指针是不同类型的,正如驶向对岸的船,一面是船的牵引,一 ...

你以为写科幻小说呢,脑洞怎么开都行。

风过无痕1989 发表于 2020-9-3 21:44:29

4goodworld 发表于 2020-9-3 21:25
你以为写科幻小说呢,脑洞怎么开都行。

我是说,你的证据不足以说明它们是不同类型的

风过无痕1989 发表于 2020-9-4 01:37:31

sunrise085 发表于 2020-9-3 11:05
没明白你要改成什么

这句是什么意思?


你的回复,使我茅塞顿开,我已经想明白了,我要的结论

赵二 发表于 2020-9-4 04:45:11

高深!

风过无痕1989 发表于 2020-9-4 11:12:44

赵二 发表于 2020-9-4 04:45
高深!

没什么高深的。只是将所学到的内容进行归纳、总结,以便于更好的记忆和理解和提高
页: [1]
查看完整版本: 两个指针变量的关系