C:关于sizeof(),数组地址,指针

 摘要:

数组名 arr三种情况:

①sizeof(arr); 求整个数组大小

②&arr :取整个数组的地址,其值表现为数组首元素的地址(二维数组首元素为一行元素)

③其他情况:表示数组首元素的地址。

 

arr[2]=2[arr]=*(arr+2)

 

指针:指针存放的是地址,标识一块地址空间,指针让内存访问更方便。

指针(地址)的大小在32位是4字节 ,在64位下是8字节。

#include<stdio.h>
int main()
{
    int b[10]={1,2,3,4,5};
    printf("%d\n",sizeof(b));//整个数组大小20字节
    printf("%d\n",sizeof(b+0));//第一个元素的地址4字节(这里b为数组首元素地址)
    printf("%d\n",sizeof(*b)); //b[0],4字节          (这里b为数组首元素地址)
    printf("%d\n",sizeof(b+1));//b[1]4字节          (这里b为数组首元素地址)
    printf("%d\n",sizeof(*&b));//取整个数组的内容 5*4=20字节
    printf("%d\n",sizeof(&b+1));//从数组首地址跳过整个数组后的地址
    printf("%d\n",sizeof(&b[0]+1));//第二个元素的地址4字节


 
	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));//sizeof+数组名 表示求整个数组大小48
	printf("%d\n", sizeof(a[0][0]));//求第一个元素的大小
	printf("%d\n", sizeof(a[0]));//求第一行元素大小为4*4=16个字节

	printf("%d\n", sizeof(a[0]+1));//只要数组名不是单独放在sizeof内,也不是&数组名,就代表首元 
                                   //素地址,这里为第一行首元素地址,+1后即第二个元素地址4bit

	printf("%d\n", sizeof(a+1));//二维数组名表示首元素的地址(即第一行元素地址),+1即第二行地 
                                //址,4字节

	printf("%d\n", sizeof(&a[0]+1));//&a[0]为第一行地址,+1即第二行的地址,4字节
	printf("%d\n", sizeof(*a));//第一行(数组首元素),四个元素16字节
	printf("%d\n", sizeof(a[100]));//a为3*4的数组,a[100]为形如a的数组的一行大小 4*4=16字节
	

	return 0;
}

 

第一次写,按自己想法写了一些,有问题还请大佬们能指出,感激不尽。 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数组名和指针sizeof是不同的。根据引用中的解释,数组名和指向该数组指针地址上是相同的,但是它们的大小不同。数组名的sizeof返回的是整个数组的大小,而指针sizeof返回的是指针类型的大小。所以,sizeof数组名会返回整个数组的大小,而sizeof指针会返回指针类型的大小。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [探讨C++中数组名与指针的用法比较分析](https://download.csdn.net/download/weixin_38691256/14871672)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++/C中 sizeof(指针)和sizeof(数组名)的区别](https://blog.csdn.net/weixin_38383877/article/details/90922929)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [c 语言中的sizeof数组名)和sizeof(指针)](https://blog.csdn.net/Colorful_lights/article/details/79819682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值