请教C++二维数组和指针的简单问题。

这段代码让我头疼。
p的定义是什么?去年我在杭州面试的时候,面试官也问过我类似的问题。
它卡在指针未初始化的地方。
a1 是什么?这取决于上下文。
去年我在上海做项目的时候,我们团队的一个老哥有一个问题困扰了很长时间,因为他看不清a1 是数组还是指针。

S[2 ]你提到的,我去年在北京偶然看到一个朋友的类似代码。
它的 s 是一个指针数组,s[2 ] 指向一个字符串。
但我记不清你提到的解引用运算符和签名 [] 运算符的优先级。
我需要快速浏览一下我的 C++ Primer。
哦,顺便说一下,我在 1 9 9 8 年买了那本书,现在它已经是古董了。
但我记得我们先下标,然后取消引用,所以 s[2 ] 首先找到第二个元素,然后取消引用它以获取该元素的第一个字符。

我尝试运行你的代码块,发现了一个小问题。
字符数组定义为 chars[4 ][6 ],但在赋值时使用了 s。
那不是很乱吗?您必须使用直接字符。
但是,您的输出语句 cout << s>你的s[2 ]输出的是地址,(s)[2 ]也是t,因为s是第一个元素,s[2 ]仍然指向tang中的t。

所以你的答案应该是t,而不是D。
去年在深圳,我们团队的一位年轻成员在这个生产报表上挣扎了很长时间。
最后他发现自己没有理解指针和数组的关系。
该代码工作正常,但如果出错,就会遇到麻烦。

稍微改变一下代码块:
cpp int main(int argc, char argv[]) { char chars[4 ][6 ] = {"张", "高", "唐", "王"}; cout << 字符[2 ] << endl> 这样就更清楚了。
去年广州有一位老人就是用这种写法的。
他说这样更容易阅读。
你看,是这样吗?
哦,顺便问一下,一定要是角色吗?去年在深圳,一个初学者把s和字符搞混了,一整天都是bug。
检查一下是否是这种情况。

简而言之,您对 s[2 ] 的取消引用以获得 t 是正确的。
去年我在北京帮朋友读代码的时候也遇到过类似的情况。
但别忘了把s改成字符,否则又是一个陷阱。
去年在上海,我们团队的整个项目就因为这个坑推迟了一周。

你看,是这样吗?

C/C++二维字符串数组赋值出错显示unhandled exception

说白了,这行代码有问题。
如果患者[i]指向空常量字符串,则很危险。
您应该使用 memset 或直接删除此行。