当我使用char或char *时,visual studio 2012(11)只会播放最后一个字符,例如:
#include <iostream>
#include <string>
int main(){
using namespace std;
char chName = 'Alex';
cout<<chName;
}
仅显示“x”。这是正确的是我使用
string strName = "Alex"
但是在那些将参数作为char的函数中,string不能作为参数传递。在这种情况下,VS编译器说字符串不能转换为int。
还告诉我char和char *之间有什么区别。
我是一名PHP开发人员,C ++非常混乱。请帮帮我。
答案 0 :(得分:7)
char
一次只能保留1个字符;在这种情况下,它会保留您的上一个字符'x'
。
char *
是指向一个或多个char
对象的指针,如果读取正确,也可以用作字符串。所以设置
const char *chName = "Alex";
cout << chName;
应输出全名。
另一个问题是您使用引文。 'x'
表示char
,而"x"
表示char
的数组,称为字符串文字。
如果有一个要求你传递char *的函数,你可以传递
const char *param = "this is da parameter";
function (param);
或
std::string param = "da parameter"; //std::string is a type of string as well.
function (param.c_str ());
您也可以使用声明
char chName[] = "Alex";
这将创建一个char
s的本地数组(即5 char
s,因为它在数组的末尾附加一个空字符)。因此,调用chName[3]
应该返回'x'
。这也可以像其他人一样流式传输到cout
cout << chName;
编辑:顺便说一句,您应该在函数int
中返回main ()
。与0
一样。
答案 1 :(得分:4)
char chName = 'Alex';
这是错误的。这样,你用Alex创建一个四字节整数,然后将它存储在一个char中 - 当然,它不适合一个字节的字符,所以只有它不太重要的字节,{{1}存储,然后输出。你需要使用
x
获得正确的输出。
您问题的替代方法:使用const char *chName = "Alex";
,因为您使用的是C ++,但对于那些期望std::string
作为参数的函数,请使用:
char *
答案 2 :(得分:2)
char chName = 'Alex';
是一个多字符文字,它是实现定义的。
_ C++ standard, §2.14.3/1 - Character literals _
An ordinary character literal that contains more than one c-char is a multicharacter
literal . A multicharacter literal has type int and implementation-defined value.
而不是这个,你应该使用
const char *chPTR = "Alex";
或
char chName[] = "Alex";
char和char之间的区别*
在char ch;
ch中是 char变量,它可以存储单个ascii字符,而char *ch;
是指向char 的指针,可以存储a的地址char变量。
char和String之间的区别
见this SO post。
答案 3 :(得分:1)
char
类型包含单个整数值,通常范围为-128到127.它不是字符串类型。 C中的单引号用于字符文字,而不是字符串文字。 'Alex'
与"Alex"
不同。
您使用的字面文字语法:
char chName = 'Alex';
称为多字符文字,它具有类型为int
的实现定义值。我熟悉的实现通过连接各个字符的值来构造它。所以'Alex'
的值可能是A 0x41,l 0x6C,e 0x65,x 0x78或0x416C6578
。然后,当你将它分配给一个char时,它会被截断为最后一个字节(因为所有char都可以保存),即0x78,或者与'x'
相同。
*
是C中的指针引用运算符,它也在声明指针时使用。因此const char *chName = "Alex";
声明指向char
而不是单个char
的指针,该指针将指向字符串文字"Alex"
的第一个字符。所以你的程序可能看起来像:
#include <iostream>
int main(){
const char *chName = "Alex";
std::cout << chName;
}