【c语言】数组小练习

解题思路

1.对于sizeof(  )
    1.数组名单独放在sizeof()内部,数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节。
    2.&数组名,数组名表示整个数组,&数组名,取出的是整个数组的地址。
    3.除此之外所有的数组名都表示整个首元素地址。
2.对于strlen(),它寻找的是‘\0’,有‘\0’终止,没有继续数。

int a[] = { 1, 2, 3, 4 };

1.printf("%d\n", sizeof(a)); // 16  
2.printf("%d\n", sizeof(a+0)); // 4  不是单独放在sizeof()内是第一个元素的地址
3.printf("%d\n", sizeof(*a));  	//4 *a就是啊a【0】
4.printf("%d\n", sizeof(a+1));//4 第二个元素的地址
5.printf("%d\n", sizeof(a[1])); //4  第二个元素
6.printf("%d\n", sizeof(&a));   // 4 地址都是4个字节(32平台)
7.printf("%d\n", sizeof(&a+1)); //4 4后面的地址
8.printf("%d\n", sizeof(&a【0】));/4  第一个元素的地址
9.printf("%d\n", sizeof(&a【0】+1));//4 第二个元素的地址

char a[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’};

1.printf("%d\n", sizeof(a));
//6
2.printf("%d\n", sizeof(a+0));
//4  地址
3.printf("%d\n", sizeof(*a));
//1  字符a
4.printf("%d\n", sizeof(a【1】));
//1
5.printf("%d\n", sizeof(&a));
//4
6.printf("%d\n", sizeof(&a+1));
//4
7.printf("%d\n", sizeof(&a【0】+1));
//4 f的后面地址
8.printf("%d\n", sizeof(&a+1));
//4  第二个元素的地址

1.printf("%d\n", strlen(a));
//随机值 因为没有\0
2  printf("%d\n", strlen(a+0));
//随机值 并且和上一个一样
3.printf("%d\n", strlen(*a));
//错误
4.printf("%d\n", strlen(a【1】));
//错误
5.printf("%d\n", strlen(&a));
//随机值
6.printf("%d\n", strlen(&a+1));
//随机值 和1的随机值差6
7.printf("%d\n", strlen(&a【0】+1));
//随机值 和1的随机值差1

char arr[] = “abcdef”;

1.printf("%d\n",sizeof(arr));  //7 计算大小有'\0'
2.printf("%d\n",sizeof(arr+0)); // 4 地址是4字节
3.printf("%d\n",sizeof(*arr)); // 1 首元素的大小
4.printf("%d\n",sizeof(arr【1】));//1 首元素的大小
5.printf("%d\n",sizeof(&arr)); //4 取地址32位平台是4字节,64位平台是8字节
6.printf("%d\n",sizeof(&arr+1)); //4   取地址32位平台是4字节,64位平台是8字节

1.printf("%d\n",strlen(arr)); //6
2.printf("%d\n",strlen(arr+0));//6
3.printf("%d\n",strlen(*arr)); //错误 传的是一个值,所以错误。
4.printf("%d\n",strlen(arr【1】));//错误  传的是一个值
5.printf("%d\n",strlen(&arr)); //6  &arr就是从头数,数到‘\0’’停止
6.printf("%d\n",strlen(&arr+1));//   随机值,因为将整个arr跳过
7.printf("%d\n",strlen(&arr【0】+1));//5  从第二个元素向后数

char *p = “abcdef”;

 1.printf("%d\n",sizeof(p)); //4 指针变量都是4个字节
 2.printf("%d\n",sizeof(p+1));//4  p+1是b的地址
 3.printf("%d\n",sizeof(*p));//1 a的大小
 4.printf("%d\n",sizeof(p【0】));// 同上
 5.printf("%d\n",sizeof(&p));//4
 6.printf("%d\n",sizeof(&p+1));//4  p是个指针变量,指向是a的地址,p是变量有自己的地址,char **pp =&p;pp是个二级指针,指向的是p的地址,指向的是char *类型的变量,加一跳过的是一个char *的大小
 7.printf("%d\n",sizeof(&p【0】+1));//4

1.printf("%d\n",strlen(p));  //6
2.printf("%d\n",strlen(p+1));//5
3.printf("%d\n",strlen(*p));//错误 因为传的是个值
4.printf("%d\n",strlen(p【0】));//同上
5.printf("%d\n",strlen(&p));//随机值
6.printf("%d\n",strlen(&p+1));//随机值
7.printf("%d\n",strlen(&p【0】+1));//5       从第二个元素后面数

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

1.printf("%d\n",sizeof(a)); //48
2.printf("%d\n",sizeof(a[0][0]));//4
3.printf("%d\n",sizeof(a[0]));//16  第一行的大小
4.printf("%d\n",sizeof(a[0]+1));//4 第一行第二个元素的地址
5.printf("%d\n",sizeof(a+1)); //4 第二行的地址
6.printf("%d\n",sizeof(&a[0]+1));//4 第二行的地址
7.printf("%d\n",sizeof(*a));//16 不是单独放,a表示第一行的地址
8.printf("%d\n",sizeof(a[3])); //16   sizeof()内部的表达式是不参与运算的,所以结果是16,虽然第4行不存在但是不访问

sizeof关键字是在编译时,括号里的表达式是在运行时的,所以不执行sizeof的表达式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值