扫码关注官方订阅号
以下声明
#include<stdio.h> int main() { char *(*s)[ ]; return 0; }
为啥可以这样声明呢?1.请问这样声明的指针指向的空间是?
闭关修行中......
char *(*s)[ ];按优先级,先看(*s)。由于指针和数组可以转换,那么 (*s) 转换为 s[];所以上式可以转换成:char *s[][];再按优先级来判断,先确定s[][]为一个二维数组,前面加一“”号,表示其每一个元素都为一个char(即字符串)。
char *(*s)[ ];
(*s)
s[]
char *s[][];
s[][]
二维数组
再啰嗦一句,如果没有里面的括号,是这种情况:char **s[],那就又不一样了。按优先级,s先与下标符结合,即s[],这表示为一个一维数组,再与前面的两个“*”号结合,表示数组中的元素为指向指针的指针。
char **s[]
一维数组
s是指向char 数组的指针,或者说是指向char*的指针
@大当家 回答的很好了,《C专家编程》专门用了一章来讲解C的声明,我之前写过一篇读书笔记,你可以边看书边看笔记《C专家编程》读书笔记(1-3章)
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
char *(*s)[ ];按优先级,先看(*s)。由于指针和数组可以转换,那么(*s)转换为s[];所以上式可以转换成:char *s[][];再按优先级来判断,先确定
s[][]为一个二维数组,前面加一“”号,表示其每一个元素都为一个char(即字符串)。再啰嗦一句,如果没有里面的括号,是这种情况:
char **s[],那就又不一样了。按优先级,s先与下标符结合,即s[],这表示为一个一维数组,再与前面的两个“*”号结合,表示数组中的元素为指向指针的指针。s是指向char 数组的指针,或者说是指向char*的指针
@大当家 回答的很好了,《C专家编程》专门用了一章来讲解C的声明,我之前写过一篇读书笔记,你可以边看书边看笔记《C专家编程》读书笔记(1-3章)