C语言面试题目指针详解

C语言的指针是个神奇的存在,让你充分感受到算法之美。c语言是靠数据结构、算法的分析和设计过程中的一门基础课,所以从问题出发能更加深入了解指针。

在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符;
strlen()是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)

观察输出结果:

	char arr[] = "abcdef";
	
	printf("%d\n",sizeof(arr));
	printf("%d\n",sizeof(arr + 0));
	printf("%d\n",sizeof(*arr));
	printf("%d\n",sizeof(arr[1]));
	printf("%d\n",sizeof(&arr));
	printf("%d\n",sizeof(&arr + 1));
	printf("%d\n",sizeof(&arr[0] + 1));
		
	printf("%d\n",strlen(arr));
	printf("%d\n",strlen(arr + 0));
	printf("%d\n",strlen(*arr));
	printf("%d\n",strlen(arr[1]));
	printf("%d\n",strlen(&arr));
	printf("%d\n",strlen(&arr + 1));
	printf("%d\n",strlen(arr[0] + 1));

你能否说出每个输出的区别和输出的结果呢

分析:
sizeof(arr)//计算的数组的大小,单位是字节:7
sizeof(arr + 0);//计算的是地址的大小 -arr + 0是首元素的地址
sizeof(*arr)//1 *arr是首元素,sizeof(*arr)计算首元素的大小
sizeof(arr[1])//1 arr[1]是第二个元素,sizeof(arr[1])计算的是第二个元素的大小
sizeof(&arr)// 4/8 &arr虽然是数组的地址,但也是地址,所以是4/8个字节
sizeof(&arr + 1)// 4/8 &arr+1是跳过整个数组后的地址,但也是地址
sizeof(&arr[0] + 1)// 4/8 &arr[0]+1 第二个元素的地址
strlen(arr)//6 个字节
strlen(arr + 0)//6个字节
strlen(*arr)//error
strlen(arr[1])//error
strlen(&arr)//&arr - 数组的地址 - 数组指针 cahr(*p)[7] = &arr;
strlen(&arr + 1)//6个字节
strlen(arr[0] + 1)//随机值

char arr[] = "abcdef";
	
	printf("%d\n",sizeof(arr));//计算的数组的大小,单位是字节:7 
	printf("%d\n",sizeof(arr + 0));//计算的是地址的大小 -arr + 0是首元素的地址 
	printf("%d\n",sizeof(*arr));//1 *arr是首元素,sizeof(*arr)计算首元素的大小 
	printf("%d\n",sizeof(arr[1]));//1 arr[1]是第二个元素,sizeof(arr[1])计算的是第二个元素的大小 
	printf("%d\n",sizeof(&arr));// 4/8 &arr虽然是数组的地址,但也是地址,所以是4/8个字节 
	printf("%d\n",sizeof(&arr + 1));// 4/8 &arr+1是跳过整个数组后的地址,但也是地址 
	printf("%d\n",sizeof(&arr[0] + 1));// 4/8 &arr[0]+1 第二个元素的地址 
		
	printf("%d\n",strlen(arr));//6 
	printf("%d\n",strlen(arr + 0));//6
	printf("%d\n",strlen(*arr));//error
	printf("%d\n",strlen(arr[1]));//error
	printf("%d\n",strlen(&arr));//&arr - 数组的地址 - 数组指针 cahr(*p)[7] = &arr; 
	printf("%d\n",strlen(&arr + 1));//6
	printf("%d\n",strlen(arr[0] + 1));//随机值 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值