C argv指针类型

C argv pointer type

本文关键字:类型 指针 argv      更新时间:2023-10-16

我很困惑如何使用指针来让代码工作:

#include<stdio.h>
int main(int argc, char *argv[]){
    char* test = argv[1][0];
    printf("hello %sn", test);
}

错误如下:

incompatible integer to pointer conversion initializing
  'char *' with an expression of type 'char'; take the address with &
  [-Wint-conversion]

argv[1][0]的类型为char

argv[1]的类型为char*

您需要使用:

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];

第一个参数是argv[1]argv[1][0]是该参数的第一个字符。将代码更改为

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个索引处的charcated分配给测试
指针。由于"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。