数组sizeof、strlen相关运算(一维、二维、字符数组)

//一维数组
        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 第二个元素地址
//字符数组
  	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(&arr+1)); //4 下一个数组的地址
  	printf("%d\n", sizeof(&arr[0]+1)); //4 第二个元素地址
 
	printf("%d\n", strlen(arr)); //随机值x 执行需遇到"\0"结束
	printf("%d\n", strlen(arr + 0)); //随机值x 执行需遇到"\0"结束
	printf("%d\n", strlen(*arr)); //error 执行的"a"的ASCII
	printf("%d\n", strlen(arr[1])); //error 执行的"b"的ASCII
	printf("%d\n", strlen(&arr)); //随机值x 执行需遇到"\0"结束
	printf("%d\n", strlen(&arr + 1)); //随机值x-6 执行需遇到"\0"结束
	printf("%d\n", strlen(&arr[0] + 1)); //随机值x-1 执行需遇到"\0"结束
  	char arr[] = "abcdef";

	printf("%d\n", sizeof(arr)); //7 数组的大小,包括"\0"
	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(&arr + 1)); //4 下一个数组的地址
	printf("%d\n", sizeof(&arr[0] + 1)); //4 第二个元素地址

  	printf("%d\n", strlen(arr)); //6 数组的长度
	printf("%d\n", strlen(arr+0); //6 数组的长度
  	printf("%d\n", strlen(*arr)); //error 执行的"a"的ASCII
  	printf("%d\n", strlen(arr[1])); //error 执行的"b"的ASCII
  	printf("%d\n", strlen(&arr)); //6 数组的长度
  	printf("%d\n", strlen(&arr+1)); //随机值 
  	printf("%d\n", strlen(&arr[0]+1)); //5 从第二个元素开始的数组长度
  	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 + 1)); //4 跳过p的地址
	printf("%d\n", sizeof(&p[0] + 1)); //4 第二个元素地址

  	printf("%d\n", strlen(p)); //6 数组长度 
  	printf("%d\n", strlen(p+1)); //5 从第二个元素开始的数组长度
  	printf("%d\n", strlen(*p)); //error 执行的"a"的ASCII
  	printf("%d\n", strlen(p[0])); //error 执行的"a"的ASCII
  	printf("%d\n", strlen(&p)); //随机值
  	printf("%d\n", strlen(&p+1)); //随机值
  	printf("%d\n", strlen(&p[0]+1)); //5 从第二个元素开始的数组长度
 //二维数组
 	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[3])); //16 第二行元素




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值