C打印相同的数组使用两种方法生成不同的结果

时间:2017-12-20 12:20:27

标签: c pointers

我正在尝试使用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),如果没有,为什么我的代码在第二个例子中起作用,同时它不在第一个?

1 个答案:

答案 0 :(得分:4)

testchar**。正如一些程序员家伙评论的那样,[]优先于*所以你的for循环执行如下:

  1. *test[0] == *(test[0]) == 'a'
  2. *test[1] == *(test[1]) == *(&test 之后保存在内存中的其他地址)=&gt; UB
  3. 在整个程序中使用一个间接(即*,而不是**和&test),或使用(*test)[i]