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;
}