C 打印字符数组时为什么不使用“*”?
例如:C 打印字符数组时为什么不使用“*”?,c,arrays,pointers,char,C,Arrays,Pointers,Char,例如: #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 < MA
#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;
}
这是因为
names[i]
是char*
类型,这正是printf(“%s”)
所期望的。使用前面的*
将给出一个字符
相反,ptr[i]
属于int*
类型。这是因为printf(“%d”)
需要一个int
,在ptr
前面需要一个*
就像informaticenzero
所说的,当将printf(…)
与%d
一起使用时,printf(…)
希望您提供一个int
值。但是,printf(…)
with%s
希望您提供一个char*
值
就你而言:
ptr
=>int**
,因此ptr[i]
=>int*
和*ptr[i]
=>int
names
=>char**
,因此names[i]
=>char*
printf(…)
然后使用char*
对字符进行迭代,直到找到基本上是“结束”的\0
字符。另外,在使用恒定大小的数组时,请尝试使用sizeof
运算符来确定数组的大小。这样您就不需要定义MAX
。但是,当将数组传递给函数时,它会丢失其大小信息,sizeof
将不起作用。这意味着您应该将size作为一个单独的变量与array一起传递。您可以使用int*ptr[MAX]声明和指针数组
(MAX
),使用ptr[foo]
引用数组中的单个指针,就像将字符指针声明为char*ptr一样
并使用ptr
——无技巧引用存储在该位置的地址。
#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;
}