数组的相关运算

数组是C语言中一个非常重要的概念,数组运算有许多陷阱。

一维字符数组

#include<stdio.h>
int main()
{
	char arr[] = {'a','b','c','d','e','f'};
	printf("%d\n", sizeof(arr));//6
	printf("%d\n", sizeof(arr+0));//4 相当于字符'a'地址 
	printf("%d\n", sizeof(*arr));//1
	printf("%d\n", sizeof(arr[1]));//1
	printf("%d\n", sizeof(&arr));//4
	printf("%d\n", sizeof(&arr+1));//4
	printf("%d\n", sizeof(&arr[0]+1));//4

	return 0;
} 
一维数字数组

#include<stdio.h>  
int main()  
{  	int a[] = {1,2,3,4};  
	printf("%d\n",sizeof(a));//16  
	printf("%d\n",sizeof(a+0));//4  
	printf("%d\n",sizeof(*a));//4  
	printf("%d\n",sizeof(a+1));//4  
	printf("%d\n",sizeof(a[1]));//4  
	printf("%d\n",sizeof(&a));//4  
	printf("%d\n",sizeof(&a+1));//4 跳过一个数组的长度   
	printf("%d\n",sizeof(&a[0]));//4  
	printf("%d\n",sizeof(&a[0]+1));//4 相当于a[1]  
	return 0; 
//数组地址和首元素地址一样,但是+1的意义不同  
}


指针与一维数组

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{

	//sizeof()里的表达式预编译就已经处理,表达式不执行 
	//strlen()向后面找'\0' 
	char *p = "abcdef";
	printf("%d\n", sizeof(p));//4 指针 
	printf("%d\n", sizeof(p+1));//4 指针
	printf("%d\n", sizeof(*p));//1
	printf("%d\n", sizeof(p[0]));//1
	printf("%d\n", sizeof(&p));//4
	printf("%d\n", sizeof(&p+1));//4
	printf("%d\n", sizeof(&p[0]+1));//4
	
	printf("%d\n", strlen(*p));//error
	printf("%d\n", strlen(p[0]));//error
	printf("%d\n", strlen(&p));//error
	printf("%d\n", strlen(&p+1));//error
	
	printf("%d\n", strlen(p));//6 
	printf("%d\n", strlen(p+1));//5



	printf("%d\n", strlen(&p[0]+1));//5
	


	return 0;
} 


二维数组

#include<stdio.h>
int main()
{

	int a[3][4] = {0};
	printf("%d\n",a+1);
	printf("%d\n",sizeof(a));//48
	printf("%d\n",sizeof(a[0][0]));//4
	printf("%d\n",sizeof(a[0]));//16
	printf("%d\n",sizeof(a[0]+1));//4 相当于a[0][1]
	printf("%d\n",sizeof(a+1));//4 相当于地址 
	printf("%d\n",sizeof(&a[0]+1));//4
	printf("%d\n",sizeof(*a));//16 以a[0][0]为首元素的一维数组
	printf("%d\n",sizeof(a[3]));//16 预编译 	
	return 0;
} 

总结:
数组名代表整个数组的时候只有两种情况:
sizeof(数组名),这里的数组名表示整个数组。
&数组名,这里的数组名表示整个数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值