use*_*875 15 c arrays pointers
这可能是一个基本问题,但写char*[]和char**有什么区别?例如,在main中,我可以有一个char*argv [].或者我可以使用char**argv.我假设两种符号之间必须存在某种差异.
Jer*_*fin 20
在这种情况下,根本没有区别.如果您尝试使用数组类型作为函数参数,编译器将"调整"是为指针类型,而不是(即,T a[x] 作为函数参数意味着完全相同同样的事情:T *a).
在适当的情况下(即,不作为函数参数),使用数组和指针表示法之间可能存在差异.一个常见的是extern声明.例如,假设我们有一个包含以下内容的文件:
char a[20];
Run Code Online (Sandbox Code Playgroud)
我们希望在另一个文件中显示它.这将有效:
extern char a[];
Run Code Online (Sandbox Code Playgroud)
但这不会:
extern char *a;
Run Code Online (Sandbox Code Playgroud)
如果我们改为使用指针数组:
char *a[20];
Run Code Online (Sandbox Code Playgroud)
...同样仍然正确 - 声明一个extern数组工作正常,但声明一个extern指针不会:
extern char *a[]; // works
extern char **a; // doesn't work
Run Code Online (Sandbox Code Playgroud)
取决于背景.
作为一个函数参数,它们对于编译器来说意味着相同的东西,但是编写它char *argv[]可能有助于使程序员明白char**传递指向数组的第一个元素char*.
作为变量声明,它们意味着不同的东西.一个是指针指针,另一个是指针数组,数组大小不明确.所以你可以这样做:
char * foo[] = {0, 0, 0};
Run Code Online (Sandbox Code Playgroud)
并获得3个空指针的数组.三个char*s与指向一个完全不同的东西char*.
| 归档时间: |
|
| 查看次数: |
2479 次 |
| 最近记录: |