课程名称: 物联网/嵌入式工程师
课程章节: 第二周 计算机基础和C语言
主讲老师: 大白老师
今天主要学习了对一级指针的初识和简介。
一级指针其实就是我们平时常见的普通指针:
如
int a=10; int *p=&a;
然后现在介绍一下大小端:
不同系统使用的cpu不同,相对的存储形式也不同,分为大端模式和小端模式
大端模式:内存的低地址存储数据的高位,内存的高地址存储数据的低位
小端模式:内存的低地址存储数据的低位,内存的高地址存储数据的高位。
现在记一下经常记不住的点:
1个16进制数=4个2进制数
1byte=8个2进制数
所以1byte=两个十六进制数.
在32bit的操作系统中,所有类型的指针变量都是4bytes. [因为地址为4bytes]
比如
//03-pointer.c #include <stdio.h> int main() { char *x; short *y; int *z; printf("sizeof(x) = %d\n",sizeof(x)); printf("sizeof(y) = %d\n",sizeof(y)); printf("sizeof(z) = %d\n",sizeof(z)); return 0; }
结果:
sizeof(x) = 4 sizeof(y) = 4 sizeof(z) = 4
但是要注意:
不同类型的指针变量,对C语言中的同一块内从进行读取的时候,每次读取的字节数
不同。(读取为指针变量 + *,剩下数据类型的大小),具体如下:
char *p = (char *)&a; short *q = (short *)&a; int *m = &a; *p; //读取变量a的1bytes数据 *q; //读取变量a的2bytes数据 *m; //读取变量a的4bytes数据
还有就是不同的指针变量,每次移动的大小不一样:
每次移动的大小为数据类型的大小。
char *p = (char *)a; short *q = (short *)a; int *m = a; p++; //每次移动1bytes的大小 q++; //每次移动2bytes的大小 m++; //每次移动4bytes的大小
附上今天的课后作业:
答案:
(1). short *q=(unsigned short *)&data; (2). t1=*q; q++; t2=*q; (3). printf("t1+t2=%#x\n",t1+t2); printf("t1-t2=%#x\n",t1-t2);
有时候没有结果,可能不是自己努力不够,还可能是方向或者方法不对,工欲善其事,必先利其器