C指针与地址-创新互联

在C语言的学习过程中,常理不清指针(即一个变量的地址)和指针变量(专门用来存放另一变量的地址(指针)的变量)的关系,因此通过程序打印地址运行结果,来分析加强理解。以此记录学习过程中的心得,希望能帮到大家,感谢指正。

成都创新互联公司专业为企业提供姜堰网站建设、姜堰做网站、姜堰网站设计、姜堰网站制作等企业网站建设、网页设计与制作、姜堰企业网站模板建站服务,十余年姜堰做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。


前言 一、代码示例

代码如下:

#includeint main()
{
    int a=88,b=60 ;
    int *p;
    p=&a;//指向a的地址
    printf("%p\n",&a);
    printf("%#p",p);//以十六进制的形式输出
    printf (" %p ",*p);
    printf(" %p\n",&p);
    printf("%d",p);
    printf (" %d ",*p);
    printf(" %d\n",&p);
    p--;//指针移动指向b的地址
    printf("%p\n",&b);
    printf("%#p",p);
    printf (" %p ",*p);
    printf(" %p\n",&p);
    printf("%d",p);
    printf (" %d ",*p);
    printf(" %d\n",&p);
    return 0;
}
2.运行结果

代码如下:

000000000061FE1C
0X000000000061FE1C 0000000000000058  000000000061FE10
6422044 88  6422032
000000000061FE18
0X000000000061FE18 000000000000003C  000000000061FE10
6422040 60  6422032

总结

在指针*p=&a初始化后,p等同于&a即a的地址,在运行过程中可以代换。%#p是输出位0X开开头的16进制数。因此printf("%p\n",&a);    printf("%#p",p);本质是一样的。*p则是通过指针变量p存储的a的地址,间接获取a的值。*p=a,对数值%p等同于对数值以十六进制位输出。%d对p,*p,&p则是以十进制形式分别输出地址,值,地址。

p--,由于p是整型指针,p--减去int的4个字节刚好移动到b。

【注】1.这里发现后定义的变量b的地址要小于a的地址,这是因为c语言中,先定义的数据先入栈,在栈的底部(不分配内存),声明结束后,b在栈顶,所以b先出栈,先为b分配内存。因此b的地址小于a的地址。

 2.数据的地址位数和数据能存储的位数无关。学习阶段曾存在疑问(输出的地址是16位,int是4字节,即16进制的4位代表一个字节(实际应该是一个字节等于2位16进制),一个字节等于八位二进制,但八位二进制不等于四位16进制?)通过交流请教得知有关计算机组成原理,地址位数只取决于系统,所有类型的指针所占长度相同。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

文章题目:C指针与地址-创新互联
地址分享:https://www.cdcxhl.com/article32/deoepc.html

成都网站建设公司_创新互联,为您提供云服务器商城网站外贸建站虚拟主机标签优化移动网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营