【发布时间】:2014-07-21 22:30:13
【问题描述】:
我有一些生成的 C 代码如下所示:
char *example[] = {&" ",&"\n", &"\t"};
如果我自己写这个,我会去掉与号 (&),因为字符串文字已经是 char * 类型。对我来说,看起来example 应该 已经生成并声明为char**[]。
我可以确定指针是否与&s 相同?这是采用 C 中明确定义的地址的地址吗?
编辑:我正在调查当前处于生命周期中的某些软件的警告,该软件不接受任何更改。 printf("%p", &"hello world"); 是否始终与printf("%p", "hello world"); 相同,还是取决于编译器?
【问题讨论】:
-
这在很多方面都非常令人困惑。字符串文字“根本不是
char *类型,在几个方面。获取字符串文字的地址不是一回事。 -
我很确定字符串文字不是地址(类型
char *),而是一个数组(类型char[]) 或 数组初始值设定项(用于类型char[])。当然,数组可以衰减为指针,但它没有有到。 -
如果你把额外的钱花在一个好的编译器上,你会得到有用的警告,这会节省你很多时间。
-
你需要修复这段代码的“生成器”(或者插入你自己的预处理层来修复它)。
-
我目前正在调查一个警告,看看它有多严重。我很乐意做以上所有的事情来修复它,但该软件目前处于不接受对编译器、软件等进行任何更改的生命周期中。
标签: c string memory-address c-strings