嵌入式-C语言基础:指针是存放变量的地址,那为什么要区分类型?

指针是存放变量的地址,那为什么要区分类型?不能所有类型的变量都用一个类型吗?下面用一个例子来说明这个问题。

复制代码
#include<stdio.h>

int main()
{
    int a=0x1234;
    int *p=&a;
    char *c=&a;
    printf("p指向的变量a的地址=%p\n",p);//打印指针p指向的变量的16进制的地址
    printf("c指向的变量a的地址=%p\n",c);//打印指针c指向的变量的16进制的地址
    printf("p指向的变量a=%x\n",*p);//打印指针p指向的变量值,用16进制表示
    printf("c指向的变量a=%x\n",*c);//打印指针c指向的变量值,用16进制表示
    return 0;
}
复制代码

输出结果:

p指向的变量a的地址=000000000061FE0C
c指向的变量a的地址=000000000061FE0C
p指向的变量a=1234
c指向的变量a=34
可以看大,两个不同类型的指针变量p和c指向同一个变量a的地址后,打印地址时输出的都是一样的地址,但是在打印变量值的时候出现了问题,通过指针

p打印变量a的值,输出的是16进制数1234,但是通过指针c打印变量a的值确是34;这是因为c是一个字符型指针变量,它指向的值只能是一个字符型变量,占1个字节,占8位,所以只能访问到a的低8位,也就是34,而p是一个整型指针变量,它指向的是一个整型变量,整型变量占4个字节,也就是32位,所以它可以访问到a的32位,自然低16位也能访问。

 

posted @   WellMandala  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示