返回信息流各位大神,请问下下面几句话有什么区别:
char (*argv)[64];
char *argv[64];
char **argv;
char argv[100][64];
这个问题迷惑好久了,麻烦帮忙解答下,谢谢啦~~~
这是一条镜像帖。来源:北邮人论坛 / cpp / #91366同步于 2016/4/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
下面几句话有什么区别
ricann
2016/4/28镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
【 在 ricann 的大作中提到: 】
: 各位大神,请问下下面几句话有什么区别:
char (*argv)[64];
argv是个指针,指向一个有64个元素的数组,数组里每个元素都是char
char *argv[64];
argv是个有64个元素的数组,每个元素都是一个指针,那个指针指向char
char **argv;
argv是一个指针,指向另一个指针,那个指针指向char
char argv[100][64];
argv是一个有100个元素的数组,每个元素都是一个有64个元素的数组,每个元素都是char。(嗯,我没弄反,argv本身确实有100个元素)
但是,注意!如果这个argv是函数的参数,那么它的意思会有所不同。C语言的函数参数,如果是数组型,会隐式地变成指针型,忽略长度。所以:
int main(int argc, char (*argv)[64])
这个不变
int main(int argc, char *argv[64])
这个和char **argv是一样的,char *argv[]也是一样。
int main(int argc, char **argv)
这个不变
int main(int argc, char argv[100][64])
这个和char (*argv)[64]是一样的
但main函数的签名的标准写法是
int main(int argc, char **argv)
或者
int main(int argc, char *argv[])
【 在 nuanyangyang 的大作中提到: 】
:
: char (*argv)[64];
: argv是个指针,指向一个有64个元素的数组,数组里每个元素都是char
: ...................
说的很详细,谢谢啦~~
阅读汇编代码可以很好地明白这几个东西,指针和数组的使用方式是不一样的。你只要搞明白为什么 int arr[1][2] 在传做参数的时候写成int **会报错,而应该写成 int(*ptr)[2]就懂了