【发布时间】:2017-10-28 05:18:43
【问题描述】:
我知道要打印一个字符串,我们使用
char *pt = "Hi there";
printf("%s", pt);
或
char pt[] = "Hi there";
printf("%s", pt);
其中数组名的作用就像一个指向第一个元素地址的指针。
但是,例如,当我们得到一个二维数组时,要打印一个字符串,我们必须先取消对该数组的引用,然后才能打印该字符串。
char b[2][10];
strcpy(b[0], "banana");
strcpy(b[1], "apple");
printf("%s", *(b+1));
我想知道为什么我们必须在打印字符串之前先取消引用数组,因为在第一种情况下,我们可以通过将 char 数组的地址提供给 printf 来打印字符串。
但是在第二种情况下,我们已经有了第二个字符串“apple”的地址,那么为什么我们必须先取消引用指针 (b+1),然后才能 printf 里面的值?
【问题讨论】:
-
你可以写
printf("%s", b[1]);,因为b是一个二维数组,b[1]是一个一维数组,它和你现在的第一个例子一样