printf("Value of names[%d] = %s\n", i, names[i] );
为什么_names[i]_不用带*?
#include <stdio.h>
const int MAX = 4;
int main ()
{
const 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;
}
这里输出的是字符串,可以看到使用的是%s,输出字符串时可以不加*,因为字符数组直接写数组名就表示使用它的首地址
同理,调用函数传参的时候也可以不加
const char *names[] 定义的是指针数组,names[i] 保存的就是地址值。
我们在打印一个字符串时,只需要在对应的打印语句上添加该字符串的首地址,例如:
#include<stdio.h>
int main()
{
char str[6]="Hello";
printf("%s",str);
return 0;
}
str 就是我们要打印的字符串的首地址。
而在你的问题中,char *names[] 是定义了一个指向字符串的指针数组 names ,
数组 names 的每个元素都是一个字符串的首地址,
如果我们在 names[i] 前加 * ,返回的实际上是特定字符串的首字母。
我们可以试验一下,将你的代码改成:
printf("Value of names[%d] = %c\n", i, *names[i] );
会发现结果变成了: