您的当前位置:首页C语言必刷经典习题

C语言必刷经典习题

来源:锐游网


习题一:关于一维数组sizeof的相关计算

int main()
{
//一维数组
int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));//(一)
printf("%d\n",sizeof(a+0));//(二)
printf("%d\n",sizeof(*a));//(三)
printf("%d\n",sizeof(a+1));//(四)
printf("%d\n",sizeof(a[1]));//(五)
printf("%d\n",sizeof(&a));//(六)
printf("%d\n",sizeof(*&a));//(七)
printf("%d\n",sizeof(&a+1));//(八)
printf("%d\n",sizeof(&a[0]));//(九)
printf("%d\n",sizeof(&a[0]+1));//(十)
return 0;
}

注意:关于数组名有两点非常重要的知识需要了解:

①:sizeof(数组名),这里的数组名代表的是整个数组,所以算的是整个数组的大小。

②:&数组名,这里的数组名代表整个数组。

解答:

(一)、为sizeof(a),这里的a代表整个数组,所以答案为16字节

(五)、为sizeof(a[1]),很显然就是第二个元素,所以答案为4字节,这里有一个公式可以了解

                                                           a[n]=*(a+n)

(七)、为sizeof(*&a),这道题有两种思路:

①:从操作符的角度:*和&是可以相互抵消的,所以sizeof(*&a)相当于sizeof(a),所以这里的数组名a代表整个数组,所以答案为16字节

运行结果(小编的是x64环境)

第一题到此结束,你能对多少个呐?

习题二:关于字符数组与库函数strlen的相关计算

#include<string.h>
#include<stdio.h>

int main()
{
	char arr[] = { 'a','b','c','d','e','f' };
	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));//(七)
	return 0;
}

注意:库函数strlen相关介绍

②:计算规则:统计字符串中‘\0’之前的字符个数,若没有找到\0,则会一直向后统计。

③:函数声明:

size_t strlen ( const char * str );

解答:

(四)、为strlen(arr[1]),这种写法和(三)类似,把字符'b'传给strlen,所以存在非法访问内存的问题,所以这种写法是错误的

本次知识到此,后续小编会继续更新!

因篇幅问题不能全部显示,请点此查看更多更全内容

Top