【问题标题】:Why is char** argv same as char* argv[]为什么 char** argv 与 char* argv[] 相同
【发布时间】:2022-07-14 00:30:10
【问题描述】:

所以我在后台读到,在函数中传递数组时,编译器会将 int myArray(int arr[]) 转换为 int myArray(int* arr)。

还有一个数组大多数时候会衰减到一个指针,例如 arr[0] 与 (arr + 0) 相同

(如果我错了,请纠正我)

但是当涉及到 char *argv 时,它会变得令人困惑,char *argv[] 会转换为字符串数组 例如:

argv[2] = "你好"

argv[3] = "世界"

但是 **argv 和 *argv[] 怎么做一样的,因为 **argv 是指向指针的指针,**argv 怎么能包含 10 个不同的值 因为它是指向指针的指针?我想我误解了一些东西。提前谢谢你

【问题讨论】:

  • int* 只是一个指向 int 的指针,它怎么能包含 10 个不同的值?

标签: arrays c


【解决方案1】:

具有数组类型的函数参数由编译器调整为指向数组元素类型的指针。

另一方面,用作参数表达式的数组被隐式转换为指向其第一个元素的指针。

例如这些函数声明

void f( char * s[100] );
void f( char * s[10] );
void f( char * s[] );

是等价的,并且声明了一个相同的函数

void f( char **s );

【讨论】:

    猜你喜欢
    • 2011-07-08
    • 2015-10-24
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 2013-10-30
    • 2010-10-21
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多