字符指针数组输出前不用加*

#include
main(){
char* pa[7]={"sunday","monday","tuesday","wednesday"};
int i=1;
printf("%s",pa[i]);
int* a[7];
a[i]=&i;
printf("%d",*a[i]);

}

为什么printf("%s",pa[i]);的pa[i]前不用加*
而printf("%d",*a[i]);的a[i]前加*

%s会自动根据所指定的地址去向后依次寻值

  1. 字符串本身就代表字符串的首地址,pa[i]的值即为一个字符串,使用%s格式符可以直接将整个字符串打印输出;而*pa[i]是对字符串解引用,表示字符串的第一个字符。
  2. a[i]指向的是一个整型变量,保存的是它的地址,所以输出时需要解引用——*a[i],读出该地址里面的值。

兄弟弄明白了吗?我也这里不会

前面加个*引用的值,不加*引用的是地址。

&i代表的是取地址,也就是a[i]中存的值是i的地址,*a[i]是取地址操作,就是取出a[i]地址处对应的i的地址,不加星号就就是a[i]对应的值。