《带你学C带你飞》S1E21指针
S1E21视频中小甲鱼的演示示例显示,指针变量的大小是四个字节,我打印出来是8个{:5_107:}代码如下#include <stdio.h>
#include <stdlib.h>
int main()
{
char a = 'F';
int f = 123;
char *pa = &a;
int *pb = &f;
printf("a = %c\n", *pa);
printf("f = %d\n", *pb);
*pa = 'C';
*pb += 1;
printf("now, a = %c\n", *pa);
printf("now, f = %d\n", *pb);
printf("sizeof pa = %d\n", sizeof(pa));
printf("sizeof pb = %d\n", sizeof(pb));
return 0;
}
这是我打印出来的结果。是我代码的问题吗(但我对着小甲鱼演示的视频对比过了,代码应该没打错啊{:10_266:} ),难道是我电脑的问题?或者是标准改了? 你打印一下sizeof(int)呢,有木有可能是你编译器的问题,指针的大小和sizeof(int)u应该是一样的 我打印了一下,语句在这:
printf("sizeof int = %d\n", sizeof(int));
结果在这:
好像不是我编译器的问题 这个跟编译器版本有关,有些版本不同,他们之间计算会有一些区别,知道有这一回事就好了。加油,c在等你 有点编译器是支持64位的那指针自然是8字节,64指的就是cpu的寄存器和最大寻址能力,以前32位只有4字节 32bit所以只能支持4GB内存
int 一般就是代表寄存器大小的数据类型 自然和你编译器相关,你如果用的64位编译器结果就可能是这样,这个也正常啊,这个地址都是又不是你分配的。 yzzc 发表于 2022-4-14 22:22
这个跟编译器版本有关,有些版本不同,他们之间计算会有一些区别,知道有这一回事就好了。加油,c在等你
原来如此,那我就放心了哈哈哈{:10_279:} 因为64位的系统的指针是8字节,32位系统的指针是4字节。小甲鱼用的虚拟机是32位的,所以sizeof(int*)是4 int 的 位数没有明确规定 , 听编译器安排 甲鱼的C课年代久远,那时普遍X86机器,地址总线是32bit(4字节),int*自然就占4字节
但现在x64机器多,地址总线64bit(8字节),int*就变成8字节了
页:
[1]