C++ C argv指针类型
我对如何使用指针使代码正常工作感到困惑:C++ C argv指针类型,c++,c,pointers,argv,C++,C,Pointers,Argv,我对如何使用指针使代码正常工作感到困惑: #include<stdio.h> int main(int argc, char *argv[]){ char* test = argv[1][0]; printf("hello %s\n", test); } 第一个参数是argv[1],而argv[1][0]是该参数的第一个字符。将代码更改为 char* test = argv[1]; argv[1][0]的类型是char argv[1]的类型是char* 您需要
#include<stdio.h>
int main(int argc, char *argv[]){
char* test = argv[1][0];
printf("hello %s\n", test);
}
第一个参数是
argv[1]
,而argv[1][0]
是该参数的第一个字符。将代码更改为
char* test = argv[1];
argv[1][0]
的类型是char
argv[1]
的类型是char*
您需要使用:
char* test = argv[1];
char* test = argv[1];
如果使用以下命令调用程序:
program "First Arguent" "Second Argument"
然后,在main
中,argc
等于3
argv[0] = "program"
argv[1] = "First Arguent"
argv[2] = "Second Arguent"
argv[3] = NULL
在这种情况下,
argv[1][0]
计算为argv[1]
的第一个字符,它等于'F'
如果这是您想要得到的,您可以使用:
char test = argv[1][0];
如果要获取整个第一个参数,则需要使用:
char* test = argv[1];
char* test = argv[1];
char*argv[]是一个指针数组,每个指针指向一个字符数组(以null结尾)。假设您将“Hello World”作为命令行参数传递给程序。字符串(以null结尾的字符数组)的基址存储在argv[1]中。由于argv[1]指向字符串,因此argv[1][0]给出第0个字符
字符串中的索引 现在考虑你的任务:
char* test = argv[1][0];
在这里,通过使用argv[1][0],您实际上是在argv[1],并将存储在字符串第0个索引处的字符分配给测试
指针。因为“test”是一个指针,所以它被绑定到存储地址而不是值。
上述赋值为测试分配了一个字符值,因为字符是
在C中内部表示为整数,因此您将收到一条警告:
incompatible integer to pointer conversion initializing
这里的整数值指的是argv[1][0],指针是test
上述作业可用于:
char *test = &argv[1][0]; // assignment 1
这相当于:
char *test = argv[1]; // assignment 2
只要赋值1中的索引为0。就必须使用like
char*test=argv[1]
argv[1][0]
类型为char
,您已将其分配给引起您问题的char*
。要打印char
,您应使用%c
<代码> %S IST打印出<代码> 0 -终止<代码> char 数组AKA“字符串”。通常值得考虑表达式的含义,而不仅仅是它们的类型。当然,在这种情况下,类型有助于实现目标。但既然我们在教学,这两种方法都应该加以探索。这很好,我想从arv[1]中获得第一个字符,所以我只是使用char*而不是char on chance。谢谢@LightnessRacesinOrbit,感谢您帮助我们更好地回答问题。