【发布时间】:2023-04-04 20:10:01
【问题描述】:
我的老师给了我一个练习的更正,它包含使用双指针的代码。由于我对 C 相当陌生,我很难理解代码的作用。 我知道单指针的基础知识,但不知何故我在双指针路由上迷失了方向。
代码:
#include <stdio.h>
main(int argc, char** argv){
printf("\nHello ");
char** runner = argv;
++runner;
while(*(runner+2) != 0){
**runner = toupper(**runner);
printf("%s, ",*runner);
++runner;
}
**runner = toupper(**runner);
printf("%s ",*runner);
++runner;
**runner = toupper(**runner);
printf("and %s!",*runner);
}
-我遇到的第一个问题是理解为什么主函数使用双指针? -第二个问题,在初始化双指针 runner 后,它被告知指向一个更远的地方。但是,如果它指向一个指针,而指针本身又指向一个你不知道的地方,你怎么能知道它指向哪里呢?
- 由于我无法理解前两件事,我无法继续,也不知道代码如何进一步工作。
感谢您的宝贵时间
【问题讨论】:
-
天哪,这样的代码是怎么写出来的?我想我理解它,但它很难安静。
-
这很简单:
argv是一个指向指针数组的指针,每个指针指向命令行参数的第一个字符。 -
并且 runner 递增以跳过第一个 char* 字符串,这通常是程序本身的路径(虽然它可以是任意的,但可以是蠕虫)
-
随着
**的数量增加——意思是指向指针的指针,程序复杂性增加并且变得难以理解。