当前位置:首页 » 《随便一记》 » 正文

指针进阶—指针和数组笔试题解析[建议收藏](一)_呆呆兽学编程的博客

21 人参与  2021年11月05日 11:03  分类 : 《随便一记》  评论

点击全文阅读


目录

  • 写在前面
  • 指针和数组笔试题解析
    • 知识普及-数组名的意义
    • 一维数组之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位平台下代码运行结果如下:
在这里插入图片描述

总结

今天就先接受到这了,后面还会更新一部分指针的。欢迎大家点赞支持和指针~
在这里插入图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/30496.html

数组  笔试  代码  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1