朱老师嵌入式核心课程笔记
关于sizeof的应用
sizeof相关
#include<stdio.h>
#include<string.h>
#define dpchar char * //用dpchar替代char *
typedef char * tpchar; //重命名类型,制造用户自定义类型
int main(void)
{
char str[] = "hello";
printf("sizeof(str) = %d\n", sizeof(str)); //6,数组长度.
printf("sizeof(str[0]) = %d\n", sizeof(str[0])); //1
printf("strlen(str) = %d\n", strlen(str)); //5,字符串长度(不包含'\0')为5.
char *p = str;
printf("sizeof(p) = %d\n", sizeof(p)); //4
printf("sizeof(*p) = %d\n", sizeof(*p)); //1,*p指向的是str[]数组的首地址也就是str[0].
printf("strlen(p) = %d\n", strlen(p)); //5
int a = 10;
printf("sizeof(a) = %d\n", sizeof(a));
printf("sizeof(int) = %d\n", sizeof(int));
int (* p5[10]);
printf("sizeof(*p5[10]) = %d\n", sizeof(*p5[10]));
printf("sizeof(p5) = %d\n", sizeof(p5));
//char 1个字节, short 2个字节, int 4个字节, double 8个字节, 指针的默认大小为4个字节.
//函数传输的形参为数组时,传输的实际上是数组的首元素首地址。
dpchar p1, p2; //展开为 char * p1, char p2;
tpchar p3, p4; //等价于 char * p3, char * p4;
printf("sizeof(p1) = %d\n", sizeof(p1));
printf("sizeof(p2) = %d\n", sizeof(p2));
printf("sizeof(p3) = %d\n", sizeof(p3));
printf("sizeof(p4) = %d\n", sizeof(p4));
//数组的元素个数
int b[10];
int n = sizeof(b) / sizeof(b[0]); //40/4 = 10
printf("b[10]的元素个数n = %d\n", n);
return 0;
}
总结
-
sizeof与数组
sizeof(数组名) 表示数组长度;
sizeof(数组名[0]) 表示数组首元素所占字节数;
strlen(数组名) 表示字符串长度,不包括 ‘\0’. -
sizeof与指针
sizeof(指针变量名) 表示指针变量所占的字节数,一般为4(32位系统,根据地址总线位数决定);
sizeof(* 指针变量名) 表示指针指向的变量所占的字节数,根据指针指向的变量的类型决定; -
typedef与宏定义
#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错;
typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是不能在函数定义中使用typedef说明符。