【C/C++】指针水平测试!看你能坚持到第几轮?

作者: 李斯特の小迷妹分类: 计算机技术 发布时间: 2022-11-18 20:32:13 浏览:46780 次

【C/C++】指针水平测试!看你能坚持到第几轮?

齿轮KVG:
其实有点不明白二级三级指针能在哪些具体场景用到

【回复】好问题。一般能用到多重指针的时候只有多维数组,但是c++中创建多维数组有更简单的办法,所以确实很少用到。
【回复】一个结构体变量的首地址等于其首成员的首地址,这意味着将指向结构体的指针转换成指向首成员类型的指针并解引用,就能直接访问到首成员。 单向链表的结点有一个指向下一结点的next指针,若将其置为首成员,那么将指向结点的指针转为指向结点的n重指针并n重解引用,就能“直接”访问到第n个结点。[doge]
穿梭迷雾:
全过,其实挺简单,指针难是难在使用,而不是理解。理解的话,你别看国内教材,看c primer,其实很容易。 整理完就一句话。先找变量名,从变量名出发,按运算符优先级依次扩展 所以要理解指针,只需要弄清楚三个运算符 ()第一 【】 第二 *第三,就没了

【回复】同理,const也是一样,标准里面说了,你要把一个东西设置成常量,请把const关键字放在右边。可惜很多人不看 原文不记得了,大概意思是 const默认作用于其左边的东西,如果左边没有东西那么作用于其右边的东西(这句是后面标准修订的时候加的)
【回复】哈哈哈这就是个抖机灵的产物,没想到这么多人喷[大哭]
【回复】回复 @李斯特の小迷妹 : 哈哈哈哈,没事儿,你这视频还是有意义的嘛,可以帮助很多小白理解
谷雨同学:
我还以为是考const_cast/reinterpret_cast/std::launder/未确定字节是否导致可观测行为/未定义行为/实现定义行为的呢,结果只是无聊的C风格声明而已。[吃瓜]

【回复】我也以为是这些[喜极而泣][喜极而泣][喜极而泣]
爱吃肉的菜博:
如果看到那个代码有***,我直接判定为答辩

【回复】对显卡编程的时候遇到过有三级指针,有些时候是只能用三级指针。内存,显存互相拷数据么得办法
【回复】nginx是大便吗?多级指针实际上是纯c实现面向对象的方法。
木昕不是木日斥:
最根本的掌握了,剩余的都是套娃[doge]

氮氢四:
你单独拿出来问我我可能不知道,但你要让我写指针,我可清楚的一批[doge][doge][doge]

秋月英梨梨:
如果一个普通程序员对其中某个指针的含义需要细看才能弄懂,那么就说明你的代码可读性极差。你应该使用宏定义,typedef或是c++的using提高你的代码可读性

头发茂密小萌新:
我自己用的一个分辨指针类型的很简单的方法:右优先原则 先确认变量名,然后往右边结合,遇到“)”再往左边结合,遇到“(”后将“()”看做一个整体,继续往右结合,如此循环 示例:int *p【5】 p右边是【5】,所以p是数组,再右边没有,所以往左看,左边是*,所以数组元素是指针,再看右边,没有,所以再往左边看是int,所以指针指向int型,结果就是int指针数组p 示例 int (*p)(void) p向右看遇到)往左,左边是*为指针继续往左遇到(,改向右,右遇到()为函数,指针p指向函数,再往左看为int,所以函数返回值类型为int

【回复】编译器读的时候顺序是就近原则,一样近时再比较优先级
硬币用不完的TK:
习惯从里往外看的话,这几道题都不难,虽然不太能一眼看出来,不过稍微读一遍就明白了,比较基础

【回复】回复 @李斯特の小迷妹 : 没必要这么大恶意,我也是首页刷到你的视频的,说基础那确实是比较基础的,说难可能是对于刚入门的萌新会比较难,写过一段时间的要看懂就没那么困难了,而且说不定看完你这个视频并且学会的人也会觉得这些题很基础呀对吧 况且你给出的这几个例子也不是很晦涩,项目里面是偶尔可以见到的,而且还没有做语义化,直接拿int做例子,个人觉得确实不是很复杂,就算是做考题不算很高分的题
【回复】那请问不基础的是什么样的,想见识见识[微笑]
Testmelon:
我们群里上次有人讨论这个问题,他先是发了个 `int (*get_backup_buf(void))【2】 {}` 说语法很奇怪,疑惑为什么 【2】 不放在里面,然后引起了大家的讨论。最后我们在网上找到了一个非常好用的方法: https://c-faq.com/decl/spiral.anderson.html

乱欲冰封的深谷:
那个数组,它就是指针,指向数组起始位置

【回复】数组不是指针,数组就是一片连续内存,而指针类似于无符号整型,数组只是易于转化为指向数组首地址的指针而已。
【回复】数组名不是指针; 简单的证明方式: Int arr【5】; Int* p_arr; Static_assert(sizeof(arr)==sizeof(p_arr)); Assertion fails. 附来自stackoverflow308赞的回答: An array is an array and a pointer is a pointer, but in most cases array names are converted to pointers. A term often used is that they decay to pointers. 更多细节去csdn上找
【回复】数组不是指针,但数组名是指针。举个例的话,main函数的标准声明里*args【】, **args都是合法的
epoch300:
看不懂,平时最多也就是用到二级指针,而且还是少数

忆挽鸢夙莺:
int* p_1 p_1是一个指向整数数据的指针;它存放着一个整形数据的地址。 额,我就要用它,指向一个字符串,一个一维数组,一个二维数组,一个结构体,一个指针,一个函数。难道不行吗[热]

【回复】完全可以,因为指针就是地址,地址都是8个byte,所以任何东西的地址都是一样大小的。 但问题是,如果你直接把一个不是int的东西的地址放到整型指针里去,会报错的,因为类型不统一。举个栗子: char a='a'; int* p_1 = &a; // error! int* p_2=reinterpret_cast<int*>(&a); // no error. 所以,理论上是可以的,但需要进行type casting,所以何必呢
【回复】回复 @李斯特の小迷妹 : 指针的长度与处理器相关,虽然说电脑上现在基本都是64b 但是单片机现在也不少,这时候指针的长度就与MCU相关了,8b,16b,32b都有
Holmes大叔:
说实话这些不经常用很容易忘,忘了不可怕不小心记错了就比较麻烦了,而且我们没法假定每个看代码的人对运算优先级都有同样的理解,还是老老实实写括号吧。毕竟大一点的项目,还是需要团队合作[doge]

EXneverbur:
做题可以,谁代码真的这么写谁的代码就是依托答辩[doge]

计算机 C++ 编程 测验 代码 C/C++ 指针

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!