嵌入式-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位也能访问。
4556
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端