【发布时间】:2021-11-20 08:05:53
【问题描述】:
为什么我们这里需要*names[]而不是names[],当我将它定义为const char names[]时,它不会执行。
#include <stdio.h>
#include <stdlib.h>
const int MAX = 4;
int main()
{
const char *names[] = {
"dggg",
"ggq",
"gg2",
"g23",
};
for ( int i = 0; i < MAX; i++)
{
printf("Value of names[%d] = %s\n", i, names[i] );
}
return 0;
}
【问题讨论】:
-
您想要一个指向字符串的指针数组还是只包含一个字符串的数组?如果没有
*,您只能存储 1 个字符串。 -
names是一个由 (4) 个指针组成的数组。每个指针都指向一个const char,它通常被解释为一个字符串。 -
整数数组不需要
*:int arr[] = { 1, 2, 42, -1};;指向 int 的 指针 数组可以:int *ap[] = { NULL, NULL, &errno, NULL };... char 数组不需要*:char a[] = {'q', 'u', 'u', 'x'};(请注意,此数组不是字符串) -
大多数时候,*等于[],可以把字符串当成特殊数组。在您的代码中, *names[] 是二维数组。
-
@Ace_of_King 不,它不是二维数组,而是一维指针数组。每个指针可以指向单个字符,不一定是指向字符数组第一个字符的指针。一个真正的二维数组是
char names[][];