Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C argv指针类型_C++_C_Pointers_Argv - Fatal编程技术网

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,感谢您帮助我们更好地回答问题。