-1

我想知道有什么区别

char* str[NUM];
char str[NUM];
char* str;

我的理解是,像中间这样的数组定义指向第一个值的地址,即str[0]. 但我也看到了第一行代码所代表的符号,即指向数组的指针。这三个是等价的吗?我知道数组定义在堆栈中为NUM字符设置了空间,所以这可能比仅仅更好

char* str?

谢谢

4

4 回答 4

2
char* str[NUM];

这是一个NUM char指针数组

char str[NUM];

str这是一个名为NUM chars 长的数组。

char *str;

这是一个指向类型的指针char

于 2013-10-01T20:55:10.523 回答
1
char* str[NUM];
  • 具有 NUM 个元素的数组。每个元素都是一个指向字符的指针。
    一般来说,这可能是一个字符串数组。
    str[0]是第一个字符串。
    str[1]是第二个字符串,依此

    类推。此数组的任何元素都可能为 NULL。

char str[NUM];
  • 具有 NUM 个元素的数组。每个元素都是一个单独的字符。
    通常来说,这是一个长度为 NUM-1 的固定大小的字符串。
    (最后一个位置是字符串空终止符)
    此字符串不能为 NULL。它可以为空 (""),但它始终存在。

char* str;
  • 指向字符的指针。
    一般而言,这是一个字符串,没有特定的固定大小。当您找到空终止符时,您将找到字符串的结尾。
    此字符串可以为 NULL,并且不指向任何内存。
于 2013-10-01T20:55:07.130 回答
1
char* str[NUM]; 

声明str为指向 s 的num指针char数组。

char str[NUM];  

声明strnum chars 的数组。

char* str;  

声明str为指向 a 的指针char

您可以在此处测试这些类型的声明。

于 2013-10-01T20:55:18.640 回答
0
char* str1[NUM]; // an array of size NUM of pointers to char
char str2[NUM];  // an array of size NUM of char
char* str3;      // a pointer to char

这些的用途可能是:

str1[NUM-1] = strdup("foo");
strcpy(str2, "foo");
str3 = strdup("foo");
于 2013-10-01T20:55:52.843 回答