嵌入式-C语言基础:指针是存放变量的地址,那为什么要区分类型?
2024-10-20 16:07:37
指针是存放变量的地址,那为什么要区分类型?不能所有类型的变量都用一个类型吗?下面用一个例子来说明这个问题。
#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位也能访问。
最新文章
- 微信后台开发第一步:nodeJS+express接入微信后台详细教程
- Ruby Gem命令详解
- Hdu 1009 FatMouse&#39; Trade
- 前端js 判断输入的必须是数字,判断金钱
- 搭建高性能计算环境(六)、应用软件的安装之lammps
- ArrayList实现根据某属性大小相间排序
- JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结
- Java IO--字符流--InputStreamReader 和 OutputStreamWriter
- php SESSION入库的实现
- 移动端适配单位rem
- angular应用容器化部署
- adduser与useradd的区别
- C语言之冒泡排序、选择排序、折半查询、进制查表
- linux系统编译安装软件的通用步骤
- _event_active_team
- 使用Managed Extensibility Framework方便的扩展应用程序
- 从模板驱动文件ins生成cls文件
- command symbol &; mac &; emoji
- Restful&;RestSharp
- 当array_filter函数的callback留空时 他会过滤掉所有键值为false的键