对于数组必须知道的一些运算

对于数组必须知道的一些运算

关于数组需要知道的基本运算

一维数组中

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));//16个字节;整个数组的大小

printf("%d\n",sizeof(&a+1));//4个字节;数组的下一个地址,指针

printf("%d\n",sizeof(&a[0]));//4个字节;数组的首元素

printf("%d\n",sizeof(&a[0]+1));//4个字节; 数组的第二个元素的地址

字符数组中sizeof与strlen的区别

char arr[] = {'a','b','c','d','e','f'};

printf("%d\n",sizeof(arr));//6个字节;表示整个数组的大小

printf("%d\n",sizeof(arr+0));//4个字节;表示数组第一个元素的地址

printf("%d\n",sizeof(*arr));//1个字节; 数组第一个元素的大小

printf("%d\n",sizeof(arr[1]));//1个字节; 数组第一个元素的大小

printf("%d\n",sizeof(&arr));//4个字节; 整个数组的地址,即首元素的地址

printf("%d\n",sizeof(&a+1));//4个字节; 下一个个数组的地址,跳过整个数组

printf("%d\n",sizeof(&arr[0]+1));//4个字节; 数组的第二个元素的地址

strlen的运算

printf("%d\n",strlen(arr));//随机值

printf("%d\n",strlen(arr+0));///随机值 printf("%d\n",strlen(*arr));//error; strlen是求地址的长度,不是求值

printf("%d\n",strlen(arr[1]));//error; strlen是求地址的长度,不是求值

printf("%d\n",strlen(&arr));//4个字节; 整个数组的地址,即首元素的地址

printf("%d\n",strlen(&a+1));//随机值

printf("%d\n",strlen(&arr[0]+1));//随机值

char arr[] = "abcdef";

printf("%d\n",sizeof(arr));//7个字节;整个字符串的长度

printf("%d\n",sizeof(arr+0));//4个字节;表示数组第一个元素的地址

printf("%d\n",sizeof(*arr));//1个字节; 数组第一个元素的大小

printf("%d\n",sizeof(arr[1]));//1个字节; 数组第一个元素的大小

printf("%d\n",sizeof(&arr));//4个字节; 整个数组的地址,即首元素的地址

printf("%d\n",sizeof(&a+1));//4个字节; 下一个个数组的地址,跳过整个数组

printf("%d\n",sizeof(&arr[0]+1));//4个字节; 数组的第二个元素的地址

strlen的运算

printf("%d\n",strlen(arr));//6个字节,从数组的首元素地址开始遇到\0结束

printf("%d\n",strlen(arr+0));///6个字节,从数组的首元素地址开始遇到\0结束 printf("%d\n",strlen(*arr));//error; strlen是求地址的长度,不是求值

printf("%d\n",strlen(arr[1]));//error; strlen是求地址的长度,不是求值

printf("%d\n",strlen(&arr));//6个字节 ,从数组的首元素地址开始遇到\0结束

printf("%d\n",strlen(&a+1));//随机值

printf("%d\n",strlen(&arr[0]+1));//5个字节,从数组的第二个元素到\0结束

char *p = "abcdef";

printf("%d\n",sizeof(p));//4个字节;
指针变量的大小(在32位机)

printf("%d\n",sizeof(p+1));//4个字节; 指针变量的大小(在32位机)

printf("%d\n",sizeof(*p));//1个字节; 求的是数组第一个元素的大小

printf("%d\n",sizeof(p[0]));//1个字节; 求的是数组的第一个元素的大小

printf("%d\n",sizeof(&p));//4个字节; 表示p的地址

printf("%d\n",sizeof(&p+1));//4个字节;p的下一个地址

printf("%d\n",sizeof(&p[0]+1));//4个字节; p的第二个元素的地址

strlen的运算

printf("%d\n",strlen(p));//6个字节;
指向p的第一个元素地址,遇到\0结束

printf("%d\n",strlen(p+1));//5个字节; 指向p的第一个元素地址,遇到\0结束

printf("%d\n",strlen(*p));//error

printf("%d\n",strlen(p[0]));// error

printf("%d\n",strlen(&p));//随机值

printf("%d\n",strlen(&p+1));//随机值

printf("%d\n",strlen(&p[0]+1));//5个字节; p的第二个元素的遇到\0结束

二维数组的一些运算

int a[3][4] = {0};

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个字节; 求的是第一行第一个元素地址

printf("%d\n",sizeof(a+1));//4个字节; 求的是数组的第二行第一个个元素的地址

printf("%d\n",sizeof(&a[0]+1));//4个字节; 数组的第二行地址

printf("%d\n",sizeof(*a));//16个字节;数组的第一行元素的地址

printf("%d\n",sizeof(&a[0]));//16个字节;不参与运算

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值