char *myString = "Hello-World!";和 char myString[] = "Hello-World!";

20)下列语句中,正确的是(A)。

Achar*myString="Hello-World!";

Bchar myString="Hello-World!";

Cchar myString[11]="Hello-World!";

Dchar myString[12]="Hello-World!";

【答案】A

定义Char字符型变量时,不能直接把字符串"Hello-World!"赋值给myString,所以B是错误的。

关于CD,编译会报错error C2117: 'Hello-World!' : array bounds overflow数组溢出,若下标改为13或者以上则为对,即可以写为char myString[13]="Hello-World!";也可以写为:char myString[] = "Hello-World!";

 

char *myString  = "Hello-World!";和 char myString[] = "Hello-World!";两者之间有什么差别?

两者没有什么很大的区别 ,除了 sizeof(myString)两者返回的值不同,

 

char *myString  = "Hello-World!";是定义了一个指向字符串"Hello-World!"的首地址的指针。

"Hello-World!"作为静态字符串实际上存储在数据区,但写程序的人不知道这个地址,而程序本身知道。

 

char myString[13]="Hello-World!";是定义了一个字符型数组。

当某一函数以char myString[] = "Hello-World!";方式使用此静态字符串时,实际上相当于:
char myString;
strcpy(myString, "Hello-World!");
myString[13]是在栈里临时分配的。虽然myString指向的内容是"Hello-World!"但是这是复制品,不是原件。当函数结束,charmyString[]就被程序回收了,所以myString[]的内容就不再是"Hello-World!"了。
但如果以char *myString="Hello-World!";的方式使用,myString指向的是静态字符串存储的位置,也就是说指向"Hello-World!";的原件。

如果想坚持用char myString[]而不使用char *myString, 能保证str为"Hello-World!"有效方法必须是:
{
static char myString[]="Hello-World!";

return myString;
}

static char []是静态的,存储在数据区。

 

应用举例,如何将两个char*类型字符串连接?

#include 
using namespace std;

int main() 
{
	char   str3[20]; 
	char*   str1="Hello   ";  
	char*   str2="World!";  
	strcpy(str3,str1);  
	strcat(str3,str2);  
	char*   str=str3;
	cout<

 

测试结果:

char *myString =

 

 

题外话:char型变量中能不能存储一个中文汉字,为什么?

C/C++ 里面不能用char型变量存储中文汉字,因为char 只占一个字节, 汉字为两个字节。

C++中char类型只能保存单个字符。如:char s = 's';  char i = '1';

而汉字通常是两个字节来表示,不过我们可以使用char数组来表示汉字。例如char a[5]="你";

不过,在C#和java里面char为两个字节,因为C#char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中可以存储一个汉字。


 

你可能感兴趣的:(C/C++学习笔记)