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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值