数组退化成指针

先看下例子

原文链接:https://blog.csdn.net/as480133937/article/details/123512497

#include <stdio.h>

int buf[10]; 

int *p;
  
int main()
{  
	int a=sizeof(buf);
	int b=sizeof(p);
	
	printf("a的大小为:%d \n b的大小为 %d\n",a,b); 
	
	return 0;
}

buf是一个数组,p是一个指针,正常情况下 大小都应该为4
但是实际的输出确实 a=40 b=4

数组名在某些情况下是不等于指针的,只是在一些情况下会退化为指针

数组名是一个标识符,它标识出我们之前申请的一连串内存空间,而且这个空间内的元素类型是相同的——即数组名代表的是一个内存块及这个内存块中的元素类型

只是在大多数情况下数组名会“退化”(C标准使用的decay和converted这两个词)为指向第一个元素的指针。 而指针不是一种聚合类的数据结构,它保存着某一种类型的对象的地址(void*除外),也说它指向这个对象。我们可以通过这个地址访问这个对象。用一个图来解释,其中a代表了整个我们声明的内存块,p仅仅指向了一个char类型的对象

数组名只有在
sizeof 运算符
取址 & 运算符
字符串常量初始化的数组 Str[]=“abcdef”
这三种情况下不会发生退化(array decay)

其余情况下调用数组名,都会退化成指向数组首地址的指针

数组使用

#include <stdio.h>



void print_1(int *n, int size)
{

	printf("数组大小为:%d\n",size);
}
  
int main()
{	
	int Number[10]; 
	print_1(Number,sizeof(Number)/sizeof(Number[0])); 	
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值