C语言--数组&指针笔试题解析(指针:你看我几分像从前)

2023-10-27

尊贵的各位大厂码农你们好,是的,没错,我又来找你们来帮我指正文章了,今天的主题是数组和指针的笔试题专栏,大家给掌掌眼,有问题的话还请帮忙斧正哦!

 

目录

前言:

一,数组笔试题

一,一维数组

二,字符数组

2.1,直接赋值型的字符数组

2.2,字符串赋值给字符数组

 2.3,字符串赋值给字符指针

三,二维数组

二,指针笔试题 

试题1:

试题2: 

 试题3:

试题4:

试题5: 

 试题6:

 试题7:

试题8(重点理解掌握): 

前言:

首先,在开始笔试题之前,首先得了解一下几个问题:

1,sizeof()的作用是求对象所占空间的大小,单位是字节。

2,数组名的几种不同用法所代表的含义,一般情况下数组名代表的是首元素地址,但有两种例外情况,首先sizeof(数组名),这里的数组名代表整个数组。其次取地址数组名,代表的是整个数组的地址。

一,数组笔试题

一,一维数组

对于倒数第三个题有一点要强调一下,就是它跳过了整个数组,但是数组后面的地址空间是未知的,是不是我们这里再求作所占空间大小就是有问题的,答案是并不是,后面的地址只能说我们没访问权限。但是这块地址空间是一定存在的,所以就是单纯的求这块地址空间的大小。

还有*&a,如果是放在sizeof内部,他其实就是相当于sizeof(a),求整个数组的大小,但是如果是放在外面用的话,就是相当于拿到整个数组,也就是数组名,等价于首元素地址。这里二者处在不同位置,含义是不一样的

二,字符数组

2.1,直接赋值型的字符数组

对于第三个第四个这种情况,因为你拿到的是字符,比如字符a,对应ascii码就是97,那站在strlen(),你把97传给我,我就把它当成一个地址,但是首先97这个地址编号存不存在,用户能否访问都是一个问题,所以可能就会出现非法访问的问题。

 

2.2,字符串赋值给字符数组

 

到这里可以给sizeof() 与 strlen() 做一个总结:

sizeof()是一个操作符,返回值类型为size_t的无符号类型,他的作用就是计算对象所占内存空间的大小,不在乎内存中放的什么。

strlen()是一个函数,是用来计算字符串长度的,从给定的地址向后访问 ,直至到\0停止。

 

 2.3,字符串赋值给字符指针

 

 

三,二维数组

对于二维数组,这里重点需要注意几个点:

1,注意区分二维数组数组名与第一行的数组名,也就是上面的a 与 a[0],前者表示的是二维数组的首元素的地址,是第一行的地址,而后者表示的是第一行的第一个元素的地址。二者数值一样,但是意义不一样。

2,对于sizeof而言,他只是求对象所占内存空间的大小,他的求值依据是对象的类型,而不是真正的会去访问这块内存空间。所以在最后的sizeof(a[3])里面,看似好像越界访问数组了,因为数组只有三行,但是实际上我们并没有真正的访问这块空间,只是说假如有这么一块空间是int [4]类型,然后让你求这块空间所占内存空间的大小。

 

二,指针笔试题 

试题1:

int main()
{
    int a[5] = { 1, 2, 3, 4, 5 };
    int *ptr = (int *)(&a + 1);
    printf( "%d,%d", *(a + 1), *(ptr - 1));
    return 0;
}

大家觉得结果是什么? 没错,就是2,5,至于为什么是这样,解析如下:

 

试题2: 

struct Test
{
	int Num;
	char* pcName;
	short sDate;
	char cha[2];
	short sBa[4];
}*p;
	//假设p 的值为0x100000。 如下表表达式的值分别为多少?
	//已知,结构体Test类型的变量大小是20个字节
int main()
{
        p = (struct Test*)0x100000;
        printf("%p\n", p + 0x1);
	printf("%p\n", (unsigned long)p + 0x1);
	printf("%p\n", (unsigned int*)p + 0x1);
	return 0;
}

首先,定义的p是一个结构体指针,已知他的地址是0x100000。这个题的主要考查点就是不同指针类型,加上整数,移动的步长不同。

解析:

注意%p是让我们用地址的形式打印数据,并不是去找这个地址,所以对于第二个结果而言,他只是用地址的形式打印输出。至于为什么前面会补0,是因为这是在32位系统下,你输出展示得有四个字节,所以前面你得补上两个0,如果打印完全,以第一个为例应该是00000000000000000000000000100014,一共满32位。 

 

 试题3:

int main()
{
    int a[4] = { 1, 2, 3, 4 };
    int *ptr1 = (int *)(&a + 1);
    int *ptr2 = (int *)((int)a + 1);
    printf( "%x,%x", ptr1[-1], *ptr2);
    return 0;
}

 解析:

 

%x表示以十六进制不带前缀的格式输出结果,所以最后的输出是4,2000000。这里我们小总结一下,%p是以地址形式输出,结果前面会补0,%x是以十六进制不带前缀的格式输出,前面不进行任何补充,如果是%#x,输出结果前面加0x. 

试题4:

#include 
int main()
{
    int a[3][2] = { (0, 1), (2, 3), (4, 5) };
    int *p;
    p = a[0];
    printf( "%d", p[0]);
 return 0;
}

这个题的结果是什么先不说,只能说这个题有个大坑可能等着你掉进去呢!

仔细看这个数组,长得倒是有模有样的,但是内部不纯,里面放的是逗号表达式,所以结果可不是简简单单的0,那么让我们解析解析:

 

试题5: 

int main()
{
    int a[5][5];
    int(*p)[4];
    p = a;
    printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
    return 0;
}

 解析:

 

 试题6:

int main()
{
    int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int *ptr1 = (int *)(&aa + 1);
    int *ptr2 = (int *)(*(aa + 1));
    printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));
    return 0;
}

 解析:

 

 试题7:

int main()
{
 char *a[] = {"work","at","alibaba"};
 char**pa = a;
 pa++;
 printf("%s\n", *pa);
 return 0;
}

 这个题考察的一个点就是将字符串赋值给一个字符数组的时候,本质上不是将一整个字符串存进数组中,存放的只是字符串首元素地址。

 

试题8(重点理解掌握): 

int main()
{
 char *c[] = {"ENTER","NEW","POINT","FIRST"};
 char**cp[] = {c+3,c+2,c+1,c};
 char***cpp = cp;
 printf("%s\n", **++cpp);
 printf("%s\n", *--*++cpp+3);
 printf("%s\n", *cpp[-2]+3);
 printf("%s\n", cpp[-1][-1]+1);
 return 0;
}

 解析:

 

 

今天的文章就到这了,如果大家觉得还可以的话,还请帮忙三连三连哦,十分感谢!

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言--数组&指针笔试题解析(指针:你看我几分像从前) 的相关文章

随机推荐

  • 基于cnn-lstm的交通流量预测

    目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的结构 CNN LSTM结构 卷积神经网络CNN LSTM交通流量预测 基本结构 主要参数 MATALB代码 结果图 展望 背影 现在生活 为节能减排 减少电
  • ubuntu 18.04 中 eBPF samples/bpf 编译

    1 history 信息 一次成功编译 bpf 后执行 history 得到的信息 yingzhi yingzhi Host ex ex kernel linux 5 4 history 1 ls 2 mkdir ex 3 cd ex 4
  • "wordcloud2"

    OUTLINE 相关的可以生成词云的途径 wordcloud2 相关的可以生成词云的途径 wordle 介绍 从文本生成词云图 网址 http www wordle net 优点 及时调用 缺点 电脑需已安装Java 对中文不友好 成图 w
  • Proxy(代理) ARP作用及原理

    概述 代理ARP是ARP协议的一个变种 对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信 网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答 代理ARP就是将一个主机作为对另一个主
  • 解决uniapp的checkBox取消选中

  • 递归函数详解

    文章目录 1 什么是递归函数 2 递归求阶乘 3 递归的进入 4 递归的退出 5 递归的条件 1 什么是递归函数 一个函数在它的函数体内调用它自身称为递归调用 这种函数称为递归函数 执行递归函数将反复调用其自身 每调用一次就进入新的一层 当
  • IPv6详解

    定义 128bit冒号分16进制 详解 2001 5 23位 24 32位 33 48位 49 64位 固定开头 regisrty isp prefix site prefix subnet prefix 地址类型 设备没有获取ipv6地址
  • 计算机编码发展历史和编码方式

    编码是信息从一种形式或格式转换为另一种形式的过程 也称为计算机编程语言的代码简称编码 用预先规定的方法将文字 数字或其它对象编成数码 或将信息 数据转换成规定的电脉冲信号 编码在电子计算机 电视 遥控和通讯等方面广泛使用 解码 是编码的逆过
  • 【Seq2Seq】卷积序列到序列学习

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • c#之sealed关键字

    using System using System Collections Generic using System Linq using System Text using System Threading Tasks namespace
  • 仙境传说RO:NPC对话

    仙境传说RO NPC对话 mes next close函数用法详解 大家好 我是艾西 今天跟大家讲解下仙境传说mes next close函数 在游戏中所有的NPC对话都是用mes函数来创建的 我们先打开官方文档的script comman
  • win10系统打开文件安装软件总是弹出安全警告解决办法

    描述 win10系统打开文件安装软件总是弹出安全警告解决办法 步骤 win键 R 输入gpedit msc 点击用户配置 gt 管理模板 gt windows组件 gt 附件管理器文件夹 找到右侧的窗口中找到中等风险文件类型的包含列表设置
  • DemuxException: type = CodecUnsupported, info = Flv: Unsupported codec in video frame: 2

    使用ffmpeg推流到nginx服务器 带http flv module插件 ffmpeg re i rtsp admin qwer1234QWER 10 0 10 3 554 h264 ch1 sub av stream f flv rt
  • 2021-01-05

    c语言 郝斌 p141 malloc函数介绍 include
  • Swagger类的配置

    1 引入相关依赖
  • 华为OD机试 - TLV解析 Ⅱ(Java)

    题目描述 两端通过TLV格式的报文来通信 现在收到对端的一个TLV格式的消息包 要求生成匹配后的 tag length valueOffset 列表 具体要求如下 1 消息包中多组tag length value紧密排列 其中tag len
  • python基础:Python判断文件是否存在的三种方法(os.path.exsist, os.path.isfile, try-catch)

    博客原文 http www spiderpy cn blog detail 28 目录 前言 一 使用os模块 二 使用try catch 前言 通常在读写文件之前 需要判断文件或目录是否存在 不然某些处理方法可能会使程序出错 所以最好在做
  • robot framework实现web和app自动化

    前言 本文 仅适用于完全没接触过rf的小白 也是作为自己学习的一个记录 一 工欲善其事必先利其器 第一步 环境安装 1 需要python环境 去官网下载python解释器 配置环境变量 2 安装robotframework pip inst
  • Python如何实现自动发送直播弹幕,让美女主播一眼看到你

    前言 嘀嘀嘀 你喜欢的女主播开始直播了 咱就是说 时隔两个月 我又回来了 这次不是忘记密码 而是直接忘记这个账号了哈哈 报一丝啊报一丝 不过这次我真的就是会常更新的 因为看到后台还是有小伙伴私信我的 结果才看到信息 每次看直播 不知道大家有
  • C语言--数组&指针笔试题解析(指针:你看我几分像从前)

    尊贵的各位大厂码农你们好 是的 没错 我又来找你们来帮我指正文章了 今天的主题是数组和指针的笔试题专栏 大家给掌掌眼 有问题的话还请帮忙斧正哦 目录 前言 一 数组笔试题 一 一维数组 二 字符数组 2 1 直接赋值型的字符数组 2 2 字