【发布时间】:2016-12-06 15:50:36
【问题描述】:
第一块
#include <stdio.h>
const int MAX = 3;
int main() {
int var[] = { 10, 100, 200 };
int i, *ptr[MAX];
for (i = 0; i < MAX; i++) {
ptr[i] = &var[i]; /* assign the address of integer. */
}
for (i = 0; i < MAX; i++) {
printf("Value of var[%d] = %d\n", i, *ptr[i]);
}
return 0;
}
很容易理解,因为 ptr 是一个 int 指针数组。因此,当您需要访问i-th 元素时,您需要将其值取消引用为*ptr[i]。
现在是第二个块,也一样,只是现在指向一个char指针数组:
#include <stdio.h>
const int MAX = 4;
int main() {
char *names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};
int i = 0;
for (i = 0; i < MAX; i++) {
printf("Value of names[%d] = %s\n", i, names[i]);
}
return 0;
}
这一次,当我们需要访问它的元素时,为什么不先添加一个*?
我试图形成一个正确的语句来打印这个值,似乎如果你取消引用,它将是一个单一的字符。为什么?
printf("%c", *names[1]) // Z
我知道 C 中没有字符串,它是一个 char 数组。而且我知道指针,但仍然不符合这里的语法。
【问题讨论】:
-
因为我们需要访问的元素是地址。
%s告诉printf打印从给定地址开始的所有字符,直到遇到 0。在您的示例中,给定地址是names[i]的值。%c告诉printf打印给定字符。在您的示例中,给定字符是*names[i]的值,相当于names[i][0]。
标签: c arrays pointers printf format-specifiers