开开卡丁车 发表于 2022-4-14 20:52:01

《带你学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:} ),难道是我电脑的问题?或者是标准改了?

鲸鱼的可乐 发表于 2022-4-14 21:11:40

你打印一下sizeof(int)呢,有木有可能是你编译器的问题,指针的大小和sizeof(int)u应该是一样的

开开卡丁车 发表于 2022-4-14 22:12:43

我打印了一下,语句在这:
printf("sizeof int = %d\n", sizeof(int));

结果在这:

好像不是我编译器的问题

yzzc 发表于 2022-4-14 22:22:25

这个跟编译器版本有关,有些版本不同,他们之间计算会有一些区别,知道有这一回事就好了。加油,c在等你

AnisHan 发表于 2022-4-14 22:48:45

有点编译器是支持64位的那指针自然是8字节,64指的就是cpu的寄存器和最大寻址能力,以前32位只有4字节 32bit所以只能支持4GB内存
int 一般就是代表寄存器大小的数据类型

zzxhh628 发表于 2022-4-15 08:10:02

自然和你编译器相关,你如果用的64位编译器结果就可能是这样,这个也正常啊,这个地址都是又不是你分配的。

开开卡丁车 发表于 2022-4-15 08:12:27

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

原来如此,那我就放心了哈哈哈{:10_279:}

zhangjinxuan 发表于 2022-8-16 13:58:17

因为64位的系统的指针是8字节,32位系统的指针是4字节。小甲鱼用的虚拟机是32位的,所以sizeof(int*)是4

柿子饼同学 发表于 2022-8-16 20:12:31

int 的 位数没有明确规定 , 听编译器安排

ExiaGN001 发表于 2022-8-16 23:09:47

甲鱼的C课年代久远,那时普遍X86机器,地址总线是32bit(4字节),int*自然就占4字节
但现在x64机器多,地址总线64bit(8字节),int*就变成8字节了
页: [1]
查看完整版本: 《带你学C带你飞》S1E21指针