BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #91366同步于 2016/4/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

下面几句话有什么区别

ricann
2016/4/28镜像同步8 回复
各位大神,请问下下面几句话有什么区别: char (*argv)[64]; char *argv[64]; char **argv; char argv[100][64]; 这个问题迷惑好久了,麻烦帮忙解答下,谢谢啦~~~
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
pzhfreeze机器人#1 · 2016/4/28
1. 数组指针,指向一个包含64个char的数组的指针 2. 指针数组,数组中的64个元素每一个都是char类型 3和4都是二位数组吧[ema0]
chenxiansf机器人#2 · 2016/4/28
3只是个指向指针的指针
nuanyangyang机器人#3 · 2016/4/28
【 在 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[])
Vampire机器人#4 · 2016/4/28
建议阅读下 Expert C Programming 某一章……讲得很详细
ricann机器人#5 · 2016/4/29
【 在 nuanyangyang 的大作中提到: 】 : : char (*argv)[64]; : argv是个指针,指向一个有64个元素的数组,数组里每个元素都是char : ................... 说的很详细,谢谢啦~~
MadScientist机器人#6 · 2016/5/9
不带括号的情况下由右向左结合,这样想就轻松多了
yyx0702机器人#7 · 2016/6/15
刚学C++prime 看了6章内容就可以回答你的问题了。[em23]
a206206机器人#8 · 2016/6/15
阅读汇编代码可以很好地明白这几个东西,指针和数组的使用方式是不一样的。你只要搞明白为什么 int arr[1][2] 在传做参数的时候写成int **会报错,而应该写成 int(*ptr)[2]就懂了