字符型数组

来源:互联网 发布:北大软件 合肥易云 编辑:程序博客网 时间:2024/06/06 01:47

1、聚合类型,只有部分初始化时,其余部分为0('\0')

char arr[5] = {'a', 'b'};//等价于char arr[5] = {'a', 'b' ,‘0’,‘0’,‘0’};

2、未初始化时,初始值为随机值。

3、利用字符串初始化时,可省略大括号。

char brr[5] = {"abc"};//等价于char brr[5] = "abc"

4、字符串一定以\0结尾,但是字符串不可见。\0是字符串结尾标记,字符串一定有‘\0'结尾。

char crr[] = "abcd'// 5个字节,可以打印。%s格式化字符串

5、遇到‘\0'就认为字符串结束。

printf("%s\n","haha\0abcd");// 接果为haha

6、烫:对应十六进制为oxcccc。 //这是出现越界或者未初始化时,定义的一个十六进制数,对应的汉字为烫

屯:对应十六进制为oxcdcd。 //这是出现越界或者未初始化时,定义的一个十六进制数,对应的汉字为

7、字符串拷贝

int main()

{

char str1[100] = "abcd";// 聚合类(数组)只能在初始化时进行整体赋值

char str2[100] = "xyz";

//char str3 =str1; // error,字符串拷贝不能直接赋值

}

void Mystrcpy1(char *str1, char *str2) //利用数组拷贝字符串

{

int i;

for(i=0; str2[i] != '\0'; i++)

{

str1[i]=str2[i];

}

str1[i] = '\0';

}

void Mystrcpy2(char *str1, char *str2) //利用指针拷贝字符串

{

int i;

for(i=0; str2[i] != '\0'; i++)

{

*(str1 +i)= *(str2 +i);

}

*(str1 +i) = '\0';

}

void Mystrcpy3(char *str1, char *str2) //利用while语句拷贝字符串

{

while(*str2 != '\0')

{

*str1 = *str2;

str1++;

str2++;

}

str1[i] = '\0';

}

void Mystrcpy4(char *str1, char *str2) //利用while语句拷贝字符串

{

while(*str2 != '\0')

{

*str1++ = *str2++;//常考

}

str1[i] = '\0';

}

void Mystrcpy5(char *str1, char *str2) //利用while语句拷贝字符串

{

while(*str1++ = *str2++);//*与++为同一优先级,而且从右先左运算,所以先算str1++,在解指针。

//但这里为后置++,所以第一次运算时结果不变,所以解指针时,解的是*str1,而不是*(str1+1).

//由于这里为赋值语句,所以要注意终止条件,而数组最后以\0结尾,故最后一句为:*str1 = '\0',而'\0'的对应值为0,所以循环结束。

}

8、返回值:返回目标首元素地址。这是一个历史遗留问题,目的是解决链式表达问题。

链式表达,如:int a=b=c=1;//将1赋值给从,然后又将c赋值给b,最后将b赋值给a

 Mystrcpy5(str1,Mystrcpy(str2,str3));//将str3拷贝给str2,然后将结果(str2)拷贝给str1






原创粉丝点击