代码之家  ›  专栏  ›  技术社区  ›  js0110

这个问题的输出和推理是否正确?

  •  0
  • js0110  · 技术社区  · 1 年前

    给定下面的代码,如果我们使用以下命令运行程序prog4742,结果是什么 "./prog4742 6 5 8 6 9 4 2 6 64 200"

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
            printf("%c", *(*argv+9));
            return 0;
    }       
    

    根据我的说法,输出应该是6。以下是我的答案:

    1. 程序开始执行,命令行参数被传递给主函数。

    2. printf语句将字符打印在第一个命令行参数的第9个位置,即*(*argv+9)。

    3. 第一个命令行参数是“./prog4742”。当计算*(*argv+9)时,它指的是字符串索引9处的字符,即“6”。

    4. printf语句打印字符“6”。

    5. 程序返回0,表示执行成功。

    因此,程序的最终输出是“6”。我的回答和推理正确吗?

    1 回复  |  直到 1 年前
        1
  •  0
  •   Tom Karzes    1 年前

    *argv argv[0] 。它指向 argv 矢量,即 "./prog4742" 然后 (*argv + 9) 将指针前进9个字符,使其指向字符串 "2" 在同一个字符串的末尾。相当于 &argv[0][9] 最后 *(*argv + 9) 取消引用该指针,给出字符 '2' 。相当于 argv[0][9]