gpt4 book ai didi

c - 指向带 argv 的指针的指针

转载 作者:太空狗 更新时间:2023-10-29 16:25:14 26 4
gpt4 key购买 nike

根据我对指向字符数组的指针的理解,

% ./pointer one two

argv
+----+ +----+
| . | ---> | . | ---> "./pointer\0"
+----+ +----+
| . | ---> "one\0"
+----+
| . | ---> "two\0"
+----+

来自代码:

int main(int argc, char **argv) {
printf("Value of argv[1]: %s", argv[1]);
}

我的问题是,为什么 argv[1] 可以接受?为什么不是 (*argv)[1] 之类的东西?

我的理解步骤:

  1. 获取 argv,取消引用它。
  2. 它应该返回指向字符的指针数组的地址。
  3. 使用指针算法访问数组元素。

最佳答案

[] 视为指针运算符比数组更方便;它与两者一起使用,但由于数组衰减为指针,如果以这种方式查看,数组索引仍然有意义。所以本质上它会偏移指针,然后取消引用指针。

因此对于 argv[1],您真正得到的是 *(argv + 1) 用更方便的语法表示。这为您提供了 argv 指向的内存块中的第二个 char *,因为 char * 是类型 argv 指向,[1]argv 偏移 sizeof(char *) 字节,然后取消引用结果。

(*argv)[1] 将首先使用 * 取消引用 argv 以获取指向 char 的第一个指针>,然后将其偏移 1 * sizeof(char) 字节,然后取消引用 that 以获得 char。这给出了 argv 指向的字符串组的第一个字符串中的第二个字符,这显然与 argv[1] 不同。

因此,可以将索引数组变量视为由“偏移然后取消引用指针”运算符操作的指针。

关于c - 指向带 argv 的指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7631282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com