指针与数组作为sizeof() 与 strlen()的“参数“

1、指针与数组:当数组作为函数参数时,数组名等效于一个指针;

2、sizeof()不是函数,当数组名作为其”参数“时,返回的是数组所占用字节的大小;

3、strlen()是函数,其参数是字符数组名,表示在字符串中 \0前有多少个字符;

4、

int* main(void)
{
	int* a = (int*)malloc(10);
	
//	printf("%p\n",a);
//	printf("%d\n",*a);
	printf("size of a is %d\n\n",sizeof(a));
//a是一个指针,sizeof(a)像相当于表示一个指针型变量占用的字节数大小,在64位系统中为8
	
	int b[5] = {1,2,3,4,5};
	printf("sizeof b is %d\n\n",sizeof(b));
//b是数组名,返回的是b这个数组占用的字节大小,5*4 = 20

	int *d = NULL;
	printf("size of d is %d\n\n",sizeof(d));
//sizeof(d) = sizeof(指针变量)= 8	
	
	char c[] = "abcde";
	printf("size of c is %d\n\n",sizeof(c));
//sizeof(c),c是数组名,表示c这个数组占用的字节大小为6个

	printf("strlen c is %d\n\n",strlen(c));
//strlen是一个函数,strlen(c)= 5
	
	char* e = "abcde";
	printf("size of e is %d\n\n",sizeof(e));
//sizeof(e),e是指针,表示指针变量占用的字节大小为8个(因为sizeof不是函数,所以指向字符数组的指针e 和 上面的char c,对sizeof来说不是一样的)
	printf("strlen e is %d\n\n",strlen(e));
//strlen是函数,此时数组和指针是同样效果的,所以strlen(e)等效于char e[] = "abcde"中的strlen(e),值为5
	return a;
	

}

sizeof 不是函数,是在编译的时候求值的,所以不能能够动态的确定一个变量的值(所以如果一个指针指向一个数组,sizeof(指针变量)是无法获取这个指针变量指向的数组的大小的,需要显示的传递出来)。只有那些能够通过本文件中的定义能够确定的值才有可能(我说的是有可能)用 sizeof 求的,一般是依赖如何定义一个变量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小哇123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值