【问题标题】:What does &argv[2] represent?&argv[2] 代表什么?
【发布时间】:2021-11-14 03:24:17
【问题描述】:

我有以下代码:

int main(int argc, char **argv)
{
    printf("%s\n", mystrtype(argc - 2, &argv[2], argv[1]));
    return (0);
}

但我无法理解如何在脑海中表示&argv[2],因为argv[2] 已经表示二维数组的第二行。 &argv[2] 指向数组的哪一部分?谢谢。

【问题讨论】:

  • 这是一个有效的代码吗?
  • 你想得太高了。 argv[2] 是一个char *,它指向 char 数组的第一个字符。 &argv[2] 是该指针的地址。该表达式等价于argv + 2
  • 请以文本形式显示mystrtype,实际上是Minimal Reproducible Example,最短的完整代码,显示您尝试过的内容。
  • 是的,我只是使用另一个名为 mystrtype 的函数,其原型是 char *mystrtype(int size, char **array, char *string)
  • 欢迎您!请编辑问题以包含完整代码。我建议您使用tour 并阅读How do I ask a good question?

标签: arrays c pointers implicit-conversion argv


【解决方案1】:

argv 被声明为具有char ** 类型。

int     main(int argc, char **argv)

所以表达式argv[2] 的类型为char *,而表达式&argv[2] 的类型为char **。表达式&argv[2]也可以改写成argv + 2

这是一个演示程序。

#include <stdio.h>

void f( char **s )
{
    for ( ; *s; ++s ) printf( "%s ", *s );
    putchar( '\n' );
}

int main(void) 
{
    char * s[] = { "Hello", "World!", NULL };

    f( s );
    f( &s[0] );
    
    return 0;
}

程序输出是

Hello World! 
Hello World! 

函数f的这些调用

f( s );
f( &s[0] );

是等价的。在本次通话中

f( s );

数组指示符被隐式转换为指向其第一个元素的指针。

如果你有一个整数数组,那么为了让模式更清晰

int a[10];

然后将其用作函数参数,然后将其转换为指向其第一个 int * 类型元素的指针。

如果你有一个指向整数的指针数组,比如

int * a[10];

然后用作函数参数,它再次转换为其第一个元素的指针。由于数组元素的类型为int *,因此指向数组第一个元素的指针的类型为int **

【讨论】:

    猜你喜欢
    • 2015-12-21
    • 1970-01-01
    • 2022-07-14
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2022-06-20
    相关资源
    最近更新 更多