C语言声明问题

以下声明

#include<stdio.h>

int main()
 {
    char *(*s)[ ];
    return 0;   
}

为啥可以这样声明呢?
1.请问这样声明的指针指向的空间是?

阅读 2.8k
3 个回答

char *(*s)[ ];按优先级,先看(*s)。由于指针和数组可以转换,那么 (*s) 转换为 s[];所以上式可以转换成:char *s[][];
再按优先级来判断,先确定s[][]为一个二维数组,前面加一“”号,表示其每一个元素都为一个char(即字符串)。

再啰嗦一句,如果没有里面的括号,是这种情况:char **s[],那就又不一样了。按优先级,s先与下标符结合,即s[],这表示为一个一维数组,再与前面的两个“*”号结合,表示数组中的元素为指向指针的指针。

新手上路,请多包涵

s是指向char 数组的指针,或者说是指向char*的指针

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题