我正在使用C中的库argp,我想知道为什么以下两件事情不等价:
代码1:
const char * const doc = "Welcome to my program";
struct argp argp = { NULL, NULL, NULL, doc };代码2:
const char doc[] = "Welcome to my program";
struct argp argp = { NULL, NULL, NULL, doc };第一个错误不编译:
main.c:5:40:错误:初始化器元素不是常量
={ NULL,doc };
main.c:5:40:注意:(“argp.doc”的接近初始化)
但在我看来,const char doc[]就像点点滴滴的指针一样。
请注意,这两种代码都是作为全局变量进行测试的,因此在这两种情况下,变量的生存期应该是相同的。
我遗漏了什么?
发布于 2020-04-20 23:47:25
数组和指针是有区别的。
在第一种情况下,doc是一个指针,指向包含该字符串的内存块。在第二种情况下,doc是一个数组。没有指针。doc直接包含这些项目。
这两种方法都可以在需要(const char*)的地方使用,比如printf()的参数。但它们是不同的。对于第一个,指针被传递。第二步,传递doc的地址。这是间接发生的。
例如,构建这个小程序:
#include <stdio.h>
int main()
{
const char a[] = "abcdefghijkl";
const char *b = "ijklmnopqrst";
printf("sizeof(a) = %d\n",(int)sizeof(a));
printf("sizeof(b) = %d\n",(int)sizeof(b));
return 0;
}产出如下:
sizeof(a) = 13
sizeof(b) = 8当暂时省略“const”时,您还可以为指针变量指定一个新指针,但不能分配给数组变量。
https://stackoverflow.com/questions/61327730
复制相似问题