[英]initialize a pointer to a character pointer and initialize an array of pointer each pointing to a character pointer
我在这里对我的代码有疑问:
char a = 'A';
char b = 'B';
char c = 'C';
char *ad = &a;
char *ab = &b;
char *ac = &c;
char* cp[] = {ad, ab, ac};
char **d = &(cp[2]); // okay
// char **d[0] = &(cp[2]); //variant 1: error: invalid initializer
// char **d[] = &(cp[2]); //variant 2: error: invalid initializer
我不确定为什么 variant1 和 variant2 会导致错误。 对于最初的初始化(即注释ok的那一行),没有错误。 我的理解是我已经初始化了一个指针(即d),它指向一个指向一个字符的指针。 所以这似乎很好。
对于variant1,我认为(根据我的理解)我正在初始化一个指针数组,其中每个指针都指向一个指向字符的指针。 所以在这种情况下,我只初始化该数组中的第一个元素。
同样对于variant2,我初始化了一个空的指针数组,每个指针都指向一个字符。
有人可以告诉我为什么这里的编译器有错误吗?
我对变体 1 的理解是否正确? 即 d 是一个指针数组,其中数组中的每个条目都将指向一个指向字符的指针? 我认为这是正确的。 那么为什么我无法初始化变体 1?
对于variant2,我还认为我有一个指针数组,每个指针指向一个指向字符的指针。
这编译得很干净......
char a = 'A';
char b = 'B';
char c = 'C';
char *ad = &a;
char *ab = &b;
char *ac = &c;
char *cp[] = {ad, ab, ac}; // be consistent
char **d = &cp[2];
char **e[1] = { &cp[2] }; // cannot dimension an array to have 0 elements
char **f[] = { &cp[2] }; // compilers count more accurately than people
请注意没有不必要的“()”。
数组初始化器列在大括号内。 “{}”
最后一条语句的例外: char foo[] = "bar";
...“字符串”数组元素不需要大括号,除非你很傻:
char foo[] = { 'b', 'a', 'r', '\0', };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.