char* arr[][3]={{"北京","沈阳","哈尔滨"},{"北京","张家口"},{"北京","石家庄","武汉"}};第二个字符串数组的第三个元素是默认填充为0吗
时间: 2023-07-06 19:36:39 浏览: 43
不是的,对于该数组 `char* arr[][3]={{"北京","沈阳","哈尔滨"},{"北京","张家口"},{"北京","石家庄","武汉"}}`,第二个字符串数组只有 2 个元素,第三个元素并不存在,因此不会有任何默认填充值。
在 C/C++ 中,对于未初始化的内存空间,其值是不确定的,也就是常说的“垃圾值”,可能是任何值,而不一定是 0。因此,数组中没有被初始化的元素也会是不确定的值,不是默认填充为 0。
如果希望将数组中的所有元素初始化为 0,可以使用以下方式:
```
char* arr[][3] = {0};
```
这样定义的数组会将所有元素初始化为 0,即所有指针都指向空地址。如果需要初始化为其他值,可以使用循环来遍历数组并进行赋值。
相关问题
char arr[] = "12345"; char* arr1 = arr; char* arr2 = arr; *arr= "234576";哪里错了
这段代码有几个错误:
1. 在第三行中,应该使用指针 `arr2` 来指向字符串 "12345" 的地址,而不是将 `arr` 再次赋值给 `arr2`。
2. 在第四行中,应该使用单引号 `' '` 而不是双引号 `" "` 来表示字符。
正确的代码应该是这样的:
```
char arr[] = "12345";
char* arr1 = arr;
char* arr2 = &arr[0];
*arr = '2';
```
这段代码将字符 '2' 赋值给了字符串 "12345" 的第一个字符位置,即将字符串变为 "22345"。注意,`arr1` 和 `arr2` 都指向字符串 "12345" 的首地址,因此对 `*arr` 的修改会影响整个字符串。
char* arr[][3]={ {"北京","沈阳","哈尔滨"}, {"北京","张家口"}, {"北京","石家庄","武汉"} };char **p=arr[0];
这段代码定义了一个二维数组 `arr`,其中每个元素是一个指向 `char*` 类型的指针,数组共有 3 行 3 列,即总共有 9 个指针。每行表示一个字符串数组,每列表示该字符串数组中的一个元素。
接下来,将 `arr[0]` 赋值给 `char** p`,即将 `p` 指向 `arr` 的第一行,也就是指向了 `"北京"`、`"沈阳"`、`"哈尔滨"` 三个字符串的指针地址之一。
需要注意的是,该代码没有给出任何输出或者运算操作,因此没有明显的结果。