例如:
#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[i]
用于打印值,其中使用指向字符的指针数组,如下例所示,仅使用name[i]
而不使用*
#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;
}
答案 0 :(得分:4)
与informaticienzero
一样,当printf(...)
与%d
一起使用时,printf(...)
期望您提供int
值。但是,printf(...)
%s
要求您提供char*
值。
在你的情况下:
ptr
=&gt; int**
,ptr[i]
=&gt; int*
和*ptr[i]
=&gt; int
names
=&gt; char**
,names[i]
=&gt; char*
。
printf(...)
然后使用char*
迭代字符,直到找到\0
字符,这基本上是&#34;结束&#34;。此外,在使用常量数组时,请尝试使用sizeof
运算符来确定数组的大小。这样您就不需要定义MAX
。但是,在将数组传递给函数时,它会丢失其大小信息并sizeof
无法正常工作。这意味着您应该将size作为单独的变量与数组一起传递。
答案 1 :(得分:2)
这是因为names[i]
属于char*
类型,而且它正是printf("%s")
所期待的。使用*
前面会有一个char
。
相反,ptr[i]
的类型为int*
。这是因为printf("%d")
需要一个int
,*
前需要ptr
。