鱼C论坛

 找回密码
 立即注册
查看: 1401|回复: 11

[已解决]两个指针变量的关系

[复制链接]
发表于 2020-9-3 10:14:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 风过无痕1989 于 2020-9-3 10:16 编辑

下面这个程序运行是正确的,请帮我将最后两个形式的输出(输出的格式不要改变)中的指针变量 q 改为用指针变量 p 。改得了则改,若改不了,则给出一个结论性的小结
#include <stdio.h>

int main()

{
    int a[3][4] = {1,3,5,7,9,11,13,15,17,19,21,23};
    int *p,i,j;                                          // p是int*型整型变量
    int (*q)[4];                                         // q是指向包含4个整型元素的一维数组的指针变量
    p = a[0];                                            // p指向0行0列元素地址
    q = a;                                               // q指向二维数组的0行

    scanf("%d,%d",&i,&j);                                // 指定要输出的数组的行和列
    printf("a[%d,%d] = %d\n",i,j,*(*(a + i) + j));       // 输出指定元素a[i][j]的值
    printf("a[%d,%d] = %d\n",i,j,*(p + i * 4 + j));      // 输出指定元素a[i][j]的值
    printf("a[%d,%d] = %d\n",i,j,*(*(q + i) + j));       // 输出指定元素a[i][j]的值
    return 0;
}



最佳答案
2020-9-3 11:05:14
没明白你要改成什么
指针变量 q 改为用指针变量 p

这句是什么意思?
现在你的程序是三中索引方式,第一种是数组名索引,第二种是一维指针索引,第三种是数组指针索引
不知道你要将什么改为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-3 11:05:14 | 显示全部楼层    本楼为最佳答案   
没明白你要改成什么
指针变量 q 改为用指针变量 p

这句是什么意思?
现在你的程序是三中索引方式,第一种是数组名索引,第二种是一维指针索引,第三种是数组指针索引
不知道你要将什么改为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-9-3 12:03:02 | 显示全部楼层
sunrise085 发表于 2020-9-3 11:05
没明白你要改成什么

这句是什么意思?

看了你的回复,我似乎明白了点什么,但又说不上来到底是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-3 14:08:22 | 显示全部楼层
  p = a[0];                                            // p指向0行0列元素地址
    q = a;                                               // q指向二维数组的0行

这两个p和q初始值一样,你有考虑过他们偏移一个单位的地址是什么样子吗?
微信截图_20200903140529.png
初始值一样,并不代表两者的“意义”一致,充分说明两者指针是不同类型的指针,代表的含义不一样
就像你注释所言的那样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

代表的意义不一样,就能说明是不同类型的指针吗?若你能证明,是不同类型的指针,也就是我要的答案了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-3 15:16:03 | 显示全部楼层
风过无痕1989 发表于 2020-9-3 14:20
初值是一样的,都是指向 a[0][0] 这个地址,p + 1 指向了 a[0][1],指向的是同一行的下一列,而 q + 1 指 ...

如果两个指针类型一样的,偏移同一单位,那么结果应该反馈的地址是一样,我已经测试给你看了,他们偏移长度一样呀?
int*和char*两个不同类型的指针,+1的结果会一样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

偏移同一单位,不指向同一方向,并不能说明两个指针是不同类型的,正如驶向对岸的船,一面是船的牵引,一面是水流的作用,并不能说明船不是跟水流一样,是均速运行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你以为写科幻小说呢,脑洞怎么开都行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-3 21:44:29 | 显示全部楼层
4goodworld 发表于 2020-9-3 21:25
你以为写科幻小说呢,脑洞怎么开都行。

我是说,你的证据不足以说明它们是不同类型的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-4 01:37:31 | 显示全部楼层
sunrise085 发表于 2020-9-3 11:05
没明白你要改成什么

这句是什么意思?

你的回复,使我茅塞顿开,我已经想明白了,我要的结论
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-4 04:45:11 | 显示全部楼层
高深!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-4 11:12:44 | 显示全部楼层

没什么高深的。只是将所学到的内容进行归纳、总结,以便于更好的记忆和理解和提高
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 02:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表