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 <iostream>
using namespace std;

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

    return 0;
}

 

测试结果:

 

 

题外话: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型变量中可以存储一个汉字。


 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值