sizeof具体分析以及宏定义和typedef的简单区分

xiaoxiao2025-08-08  35

朱老师嵌入式核心课程笔记 关于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说明符。

转载请注明原文地址: https://www.6miu.com/read-5034521.html

最新回复(0)