鱼C论坛

 找回密码
 立即注册
查看: 717|回复: 4

[已解决]P21:指针 非作业的答疑

[复制链接]
发表于 2021-4-18 15:11:29 | 显示全部楼层 |阅读模式

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

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

x
按照老师P21节课:指针   的内容,我运行下发代码的结果如下。  我的疑问如备注。  烦请指点

a=F
a=6487567
a=123
a=6487560      //疑问:整型123占4个字节,可是560与567相差6个字节,为何?  这两个地址不连续分配吗?
size of pa=1
size of pa=8    //疑问:老师课上和书上都说指针变量长度占4个字节,为何我运行下来sizeof(pa)=8?  而不是4?
size of pb=4
size of pb=8    //疑问:同上
#include <stdio.h>

int main()
{
        char a='F';
        int b=123;
        
        char *pa=&a;
        int *pb=&b;
        
        printf("a=%c\n",*pa);   //打印指针地址指向的值,即a 
                printf("a=%d\n",pa);    //打印指针地址,十进制 
                printf("a=%d\n",*pb);
                printf("a=%d\n",pb);
                
                printf("size of pa=%d\n",sizeof(*pa));   //打印a的size 
        printf("size of pa=%d\n",sizeof(pa));    //打印指针变量pa的size 
        printf("size of pb=%d\n",sizeof(*pb));
        printf("size of pb=%d\n",sizeof(pb));
        
        return 0;
}

最佳答案
2021-4-18 15:43:01
这两个地址不连续分配吗?
哪本书上说过变量的地址是连续分配的吗?

因为你的系统是64位的,64位系统指针是8个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-18 15:43:01 | 显示全部楼层    本楼为最佳答案   
这两个地址不连续分配吗?
哪本书上说过变量的地址是连续分配的吗?

因为你的系统是64位的,64位系统指针是8个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-18 15:45:06 | 显示全部楼层
可是560与567相差6个字节
7减0等于6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-18 15:53:45 | 显示全部楼层
添加了调试选项以后地址不在连续
$ cat main.c
#include <stdio.h>

int main()
{
    int a = 100;
    int b = 10;
    printf("%p\n", &a);
    printf("%p\n", &b);
    return 0;
}
$ gcc -g -Wall -o main main.c
$ ./main 
0x7fff61194530
0x7fff61194534
$ gcc -g -Wall -fsanitize=address -o main main.c
$ ./main 
0x7ffec42dd770
0x7ffec42dd780
$ 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-18 19:29:43 | 显示全部楼层
参考一下:
变量的内存地址相对于栈底的地址是不变的。所以,如果你计算任意两个变量的地址的差都是不变的,前提是你没有重新编译。

而开始时,栈是由操作系统分配给你的线程的,所以,他分配给线程的栈的首地址是不同的,所以变量的地址跟着不同。
指针大小与电脑有关
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 15:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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