gpt4 book ai didi

c++ - char a[n][m] 和 char a[][m] 有区别吗?

转载 作者:行者123 更新时间:2023-12-05 09:32:59 26 4
gpt4 key购买 nike

还有为什么当我像第二种情况一样提供 m > 我的列值时它不打印垃圾?有什么具体原因吗?

#include <iostream>
using namespace std;

int main()
{
char a[2][5] = {{'a', 'b', 'c', 'd', 's'}, {'e', 'f', 'g', 'h', 'q'}};
cout << a[0] << endl; // abcdsefghq!V
cout << a[1] << endl; // efghq!V

char a1[][6] = {{'a', 'b', 'c', 'd', 's'}, {'e', 'f', 'g', 'h', 'q'}};
cout << a1[0] << endl; // abcds
cout << a1[1] << endl; // efghq

return 0;
}

最佳答案

Is there a difference between char a[n][m] & char a[][m]?

取决于上下文。首先是一个包含 m 个字符的 n 个数组的数组。第二个是 m 个字符数组的未知边界数组。所以,它们是不同的类型。

然而,如示例中所示,给定一个花括号初始化列表,未知边界数组将被调整为已知边界数组,其中边界是从初始化器的数量推导出来的。如果推断的初始化器数量为 n,则调整后的类型将与 char[n][m] 完全相同。

简而言之,答案是:一般来说,区别在于前者是一个已知边界的数组,后者是一个未知边界的数组,但是在这种情况中,之后没有区别未知边界数组调整为已知边界数组。


Also why it is not printing garbage

当您使用数组调用流插入运算符时,操作数会衰减为指向第一个元素的指针。该流要求 char* 参数是一个指向null 终止 字符数组的指针。违反此先决条件会导致未定义的行为。

a 中的数组不包含空终止符。您的程序的行为未定义。


你应该避免未定义的行为。 永远不要将非空终止数组传递给字符流

关于c++ - char a[n][m] 和 char a[][m] 有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67586659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com