鱼C论坛

 找回密码
 立即注册
查看: 3630|回复: 9

《带你学C带你飞》S1E21指针

[复制链接]
发表于 2022-4-14 20:52:01 | 显示全部楼层 |阅读模式
5鱼币
S1E21视频中小甲鱼的演示示例显示,指针变量的大小是四个字节,我打印出来是8个

代码如下
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5.     char a = 'F';
  6.     int f = 123;

  7.     char *pa = &a;
  8.     int *pb = &f;

  9.     printf("a = %c\n", *pa);
  10.     printf("f = %d\n", *pb);

  11.     *pa = 'C';
  12.     *pb += 1;

  13.     printf("now, a = %c\n", *pa);
  14.     printf("now, f = %d\n", *pb);

  15.     printf("sizeof pa = %d\n", sizeof(pa));
  16.     printf("sizeof pb = %d\n", sizeof(pb));

  17.     return 0;
  18. }
复制代码


这是我打印出来的结果。是我代码的问题吗(但我对着小甲鱼演示的视频对比过了,代码应该没打错啊 ),难道是我电脑的问题?或者是标准改了?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-14 21:11:40 | 显示全部楼层
你打印一下sizeof(int)呢,有木有可能是你编译器的问题,指针的大小和sizeof(int)u应该是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-14 22:12:43 | 显示全部楼层
我打印了一下,语句在这:
  1. printf("sizeof int = %d\n", sizeof(int));
复制代码


结果在这:

好像不是我编译器的问题

sizeof(int)

sizeof(int)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-14 22:22:25 | 显示全部楼层
这个跟编译器版本有关,有些版本不同,他们之间计算会有一些区别,知道有这一回事就好了。加油,c在等你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-14 22:48:45 | 显示全部楼层
有点编译器是支持64位的那指针自然是8字节,64指的就是cpu的寄存器和最大寻址能力,以前32位只有4字节 32bit所以只能支持4GB内存
int 一般就是代表寄存器大小的数据类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-15 08:10:02 From FishC Mobile | 显示全部楼层
自然和你编译器相关,你如果用的64位编译器结果就可能是这样,这个也正常啊,这个地址都是又不是你分配的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-15 08:12:27 | 显示全部楼层
yzzc 发表于 2022-4-14 22:22
这个跟编译器版本有关,有些版本不同,他们之间计算会有一些区别,知道有这一回事就好了。加油,c在等你

原来如此,那我就放心了哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-16 13:58:17 | 显示全部楼层
因为64位的系统的指针是8字节,32位系统的指针是4字节。小甲鱼用的虚拟机是32位的,所以sizeof(int*)是4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-16 20:12:31 | 显示全部楼层
int 的 位数没有明确规定 , 听编译器安排
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-16 23:09:47 | 显示全部楼层
甲鱼的C课年代久远,那时普遍X86机器,地址总线是32bit(4字节),int*自然就占4字节
但现在x64机器多,地址总线64bit(8字节),int*就变成8字节了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 20:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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