Cas*_*all 2 c string c-strings memory-address
我有一些生成的C代码,如下所示:
char *example[] = {&" ",&"\n", &"\t"};
Run Code Online (Sandbox Code Playgroud)
如果我自己写这个,我会丢掉&符号(&),因为字符串文字已经是类型char *.对我来说,看起来example 应该已经生成声明为char**[].
我可以确定指针是否与&s 相同?这是否取得了C中定义好的地址?
编辑:我正在调查当前生命周期中某些不接受任何更改的软件的警告.是否printf("%p", &"hello world");总是一样的printf("%p", "hello world");,还是这依赖于编译器?
&"string"与"string"的地址相同吗?
不,他们的类型不同.
"hello world"
Run Code Online (Sandbox Code Playgroud)
对象有类型char [12].对于表达式上下文中的其他数组,它将转换为char *.
但:
&"hello world"
Run Code Online (Sandbox Code Playgroud)
有类型char (*)[12].
所以在你的例子中,它也意味着:
char *example[] = {&" ",&"\n", &"\t"};
Run Code Online (Sandbox Code Playgroud)
是一个无效的声明,因为初始化列表中的数组元素不是类型char *.
这是正确的声明:
char *example[] = {" ", "\n", "\t"};
Run Code Online (Sandbox Code Playgroud)
为了这个问题,如果你必须使用&,这里是正确的声明:
char (*example[3])[] = {&" ",&"\n", &"\t"};
Run Code Online (Sandbox Code Playgroud)