目录
- 写在前面
- 指针和数组笔试题解析
- 知识普及-数组名的意义
- 一维数组之sizeof笔试题
- 字符数组1
- sizeof笔试题
- strlen笔试题
- 字符数组2
- sizeof笔试题
- strlen笔试题
- 常量字符串
- sizeof笔试题
- strlen笔试题
- 二维数组普及小知识
- 二维数组笔试题
- 总结
写在前面
本期文章我要给大家来分析一组经典的指针和数组笔试题。指针在编程中的用处十分的广,指针可以存放不同数据类型的指针变量,从而可以操控内存,且很多公司在面试的时候都喜欢出相关的笔试题所以能够熟练的了解并且掌握是必要的。许多人都对指针感到惧怕,多事因为没能理解其中的精髓。今天我就来带大家分析一下这一些笔试题。
指针和数组笔试题解析
知识普及-数组名的意义
做题前,我们要先了解一个知识-数组名的意义。
1.&数组名,这里地数组名代表的是整个数组,取出的是整个数组的地址;
2.sizeof(数组名),这里地数组名代表的是整个数组,计算的是整个数组的大小;
3.除上述两种情况之外的数组名都是代表数组的首元素的地址。
一维数组之sizeof笔试题
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));
上述代码输出结果是多少呢?(大家可以先思考一下)
答案如下:
32位平台下代码运行结果:
字符数组1
sizeof笔试题
char arr[] = {'a','b','c','d','e','f'};
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));
上述代码输出结果是多少呢?(大家可以先思考一下)
答案如下:
32位平台下代码运行结果:
strlen笔试题
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));
答案如下:
代码运行结果如下:
字符数组2
sizeof笔试题
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));
上述代码输出结果是多少呢?(大家可以先思考一下)
答案如下:
32位和64位平台下代码运行结果如下:
strlen笔试题
char arr[] = "abcdef";
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笔试题
char *p = "abcdef";
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(p+1));
printf("%d\n", sizeof(*p));
printf("%d\n", sizeof(p[0]));
printf("%d\n", sizeof(&p));
printf("%d\n", sizeof(&p+1));
printf("%d\n", sizeof(&p[0]+1));
上述代码输出结果是多少呢?(大家可以先思考一下)
答案如下:
32位和64位平台下代码运行结果如下:
strlen笔试题
char *p = "abcdef";
printf("%d\n", strlen(p));
printf("%d\n", strlen(p+1));
printf("%d\n", strlen(*p));
printf("%d\n", strlen(p[0]));
printf("%d\n", strlen(&p));
printf("%d\n", strlen(&p+1));
printf("%d\n", strlen(&p[0]+1));
上述代码输出结果是多少呢?(大家可以先思考一下)
答案如下:
代码运行结果如下:
二维数组普及小知识
假定有一个二维数组
int arr[3][4] = {0};
这是一个三行四列的二维数组:
二维数组可以看作是由三个元素组成的一维数组,这三个元素分别是a[0],a[1],a[2],a[0]代表第一行,a[1]代表第二行,a[2]代表第三行,每加1跳过1行元素。
a[0]是第一行数组的数组名,a[1]是第一行数组的数组名,a[2]是第一行数组的数组名。
二维数组的首元素是a[0]。除进行sizeof数组名)和&数组名中数组名代表整个数组外,其他数组名都是代表首元素地址。
二维数组笔试题
int a[3][4] = {0};
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a[0][0]));
printf("%d\n",sizeof(a[0]));
printf("%d\n",sizeof(a[0]+1));
printf("%d\n",sizeof(*(a[0]+1)));
printf("%d\n",sizeof(a+1));
printf("%d\n",sizeof(*(a+1)));
printf("%d\n",sizeof(&a[0]+1));
printf("%d\n",sizeof(*(&a[0]+1)));
printf("%d\n",sizeof(*a));
printf("%d\n",sizeof(a[3]));
上述代码输出结果是多少呢?(大家可以先思考一下)
答案如下:
32位和64位平台下代码运行结果如下:
总结
今天就先接受到这了,后面还会更新一部分指针的。欢迎大家点赞支持和指针~