课程名称: 物联网/嵌入式工程师
课程章节: 第二周 计算机基础和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);
每日一句:
有时候没有结果,可能不是自己努力不够,还可能是方向或者方法不对,工欲善其事,必先利其器