C语言指针的实例体验
来源:互联网 发布:tftp 指定端口号 编辑:程序博客网 时间:2024/05/17 23:15
引言
到了春季的三四月份,东区的各大实验室都开始陆续纳新。大多数的纳新试题都考到了C语言有关的知识,看到3G实验室的一道题,这让我想起当我面试实验室的时候的一道题,非常有趣,今天我来和大家分享一下这道题#include <stdio.h>int main (){ int a[4]={1,2,3,4}; int*ptr1=(int*)(&a+1); int*ptr2=(int*)((int)a+1); printf("%x,%x",ptr1[-1],*ptr2); return 0;}
这道题涉及到了指针,数组,强制类型转换以及运算符的优先级和大端序小端序,主要是体会指针指向的特点。
在我电脑上输出的值是 4,0200 0000(2000000)
然后让我给大家详细的分析一下这道题;
a是一个具有4个整型变量的数组的名字, &a是数组的首地址。&a+1表示让指针指向下一个数据,于是a的指向了4的下一个地址,用此来初始化ptr1,所以part1的指向如下:
在ptr1初始化的时候,令&a+1强制转换成整型指针,所以 ptr1[-1]相当于把ptr1往前挪一个整型大小,即4个字节,然后呢,
所以呢,打印出的第一个数字是a[3]的内容,即4!
第二部分
ptr2先将a组数转化成整形变量,然后加1然后再转化成整形指针,所以此时 ptr2的指向在
然后因为整形为四个字节,所以此时指向的是a{0}的后三个字节和a[1]的第一个字节,具体如下图(在x86系统下的数据存储),
因为x86系统是小端序,读取数据或存储数据的时候是最低位对应低地址,所以打印
0200 0000。
阅读全文
0 0
- C语言指针的实例体验
- 深入理解C语言指针的奥秘(实例)
- c语言函数指针数组的简单实例
- C语言优化实例:消除多级指针的间接访问
- 【C语言经典实例】-指向结构体的指针变量
- 关于C语言指针数组的几个实例
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'. > com.android.build.a
- log4net使用总结
- mono中文注释乱码
- 分布式任务调度框架技术调研
- [thinkPHP5项目实战_11]栏目修改
- C语言指针的实例体验
- C/C++ 大小端理解及转换
- hibernate sum求和(hql和sql)
- 使用Json的两种方式
- Oracle报错,ORA-28001: 口令已经失效
- poj 2104 K-th Number
- python简明教程里关于zip的一点解决办法
- 面向对象中的构造函数
- [Android6.0][RK3399] PWM Backlight 驱动分析