C argv指针类型
C argv pointer type
我很困惑如何使用指针来让代码工作:
#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。
相关文章:
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- (C )找到基本类型指针的儿童类型
- 表达式必须具有指向对象的指针类型(指针向量)
- 将子项复制构造到父类型指针中
- C 返回类型指针声明
- 调用虚拟函数而不通过类类型指针创建任何对象
- C++ 如何使用类类型指针制作向量
- 为什么基类型指针不能获取派生类对象的地址值?
- 如何在 C++ 中获取映射类型指针,映射
- 如何检查该类型的类型指针是正确对齐的
- 正在转换为短类型指针
- 指向任意类方法的模板非类型指针
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 指向shared_ptr的不透明类型 C 指针
- C++:从值类型指针强制转换为包含迭代器
- C/C++:访问给定类型指针的位置与访问另一类型指针的相同位置不同
- 比较类型指针
- 数据类型指针使用*(Datatype *)
- 如何打印c++中char类型指针的所有值