我正在尝试使用C void函数和字符串。我试过这个程序:
#include <stdio.h>
#include <string.h>
void print(char** test);
int main(){
char* test = "abcdef";
print(&test);
return 0;
}
void print(char** test){
for(int i=0;i<strlen(*test);i++)
printf("%c\n",*test[i]);
}
它为我打印了第一个a A �
然后分段错误。但是在将*test[i]
更改为*(*test+i)
后,这对我来说几乎是同样的事情。
是否有任何微妙的差异*test[i]
和*(*test+i)
,如果没有,为什么我的代码在第二个例子中起作用,同时它不在第一个?
答案 0 :(得分:4)
test
是char**
。正如一些程序员家伙评论的那样,[]
优先于*
所以你的for循环执行如下:
*test[0] == *(test[0]) == 'a'
*test[1]
== *(test[1])
== *(在&test
之后保存在内存中的其他地址)=&gt; UB 在整个程序中使用一个间接(即*,而不是**和&test
),或使用(*test)[i]