现在的位置: 首页 > 综合 > 正文

【题目】C++字符串和指针和Strlen()

2014年08月29日 ⁄ 综合 ⁄ 共 1208字 ⁄ 字号 评论关闭

1、字符串指针

char str1[] = "abc";
char str2[] = "abc";
cout<<(str1 == str2)<<endl;//输出0
const char str3[] = "abc";
const char str4[] = "abc";
cout<<(str3 == str4)<<endl;//输出0
const char *str5 = "abc";
const char *str6 = "abc";
cout<<(str5 == str6)<<endl;//输出1
char *str7 = "abc";
char *str8 = "abc";
cout<<(str7 == str8)<<endl;//输出1
 char A='a';  //A在栈中
 char *p ="a"; //p是栈中一个地址,同上

点评:

>>str1、str2、str3、str4是数组变量,各自有自己的内存空间,数组会在栈中直接存字母所以它们的地址会不同。
>>str5,str6,str7,str8是指针,它们指向相同的常量区域,上面的是局部中栈中存放,str5代表串的地址,而串在全局区存放。

>>如果是一个字符,则char *p='a'是错误的,'a'只能表示char类型。

2、const常量指针

char * const p;//p值不可更改
char const *p;//*p值不可更改
const char *p;//*p值不可更改

点评:

>>看const修饰的是谁,修饰的后面的东西,都是不可更改的。

3、字符串的大小

char ss[10]="hello1234";
char qq[]="hello1234"; //编译器会分配10个字节来存,而不是9,sizeof = 9+1
char dd[100]="";       //这个数组里面全部初始化为0
cout<<sizeof(ss)<<endl;//输出10
cout<<sizeof(dd)<<endl;//输出100

【点评】第10个字节为'\0',如果字符数大于9,则编译出错,

对于sizeof(qq[ ])的字符串,注意是编译器分配的内存大小,但是对于函数形参而言,如下

void Func(char str[100])

{
   sizeof(str); //输出4,编译器按照指针来编译,相当于sizeof(char* pStr)

}

4、sizeof和strlen的区别和联系      

//代码分析

char arr[10] = "Hello";

int len_one = strlen(arr); //输出:5,数组的

int len_two = sizeof(arr); //输出:10,数组空间的大小

         strlen(arr),只是返回字符串的个数,遍历字符串的地址,然后计数,不包括'\0'。

         sizeof(arr),定义的数组的内存单元大小。
         但是在字符串内存释放的时候,要strlen()+1。

参考:1、Sizeof与Strlen的区别和联系

2、strlen和sizeof的区别

抱歉!评论已关闭.