C++ 字符数组

来源:互联网 发布:淘宝收藏转移 编辑:程序博客网 时间:2024/05/16 08:46

字符数组初始化方法:

//1 {}号法 初始化列表

//数组初始化有2种方法 默认元素个数、指定元素个数

char buf1[] = {'a', 'b', 'c', 'd', 'e'}; //若没有指定长度,默认不分配零

//若指定长度,不够报错;buf长度多于初始化个数,会自动补充零

char buf2[6] = {'a', 'b', 'c', 'd', 'e'};

 

如果用字符串来初始化字符数组,字符串数组结尾的\0也会读进去,C语言可以在字符数组尾部加\0来模拟字符串

char buf3[] = {"abcde"}; //结论:会补充零

char buf4[] = "abcde";//buf3,buf4的维度都为6


strlen和sizeof的区别,想强调一下\0

strlen()求字符串的长度,注意字符串的长度不包含\0

sizeof(类型)字符串类型,的大小,包括\0


字符数组访问

下标法和指针法, 注意字符数组名是个常量指针,代表字符数组首元素的地址,不代表整个数组的,具体在偏移可以测出来, 另外一个方面是访问数组不要越界。


字符串数组和字符串指针区别:

<1> 初始化的字符串数组存储在栈中,可以改变其值。

<2> 初始化的字符串常量指针存储在静态常量区,不能修改其值。

  1. View Code  
  2.  1 #include<iostream.h>  
  3.  2 #include<ctype.h>  
  4.   
  5.  9 int strlower(char *string)  
  6. 10 {  
  7. 11     if(string==NULL)  
  8. 12     {  
  9. 13         return -1;  
  10. 14     }  
  11. 15   
  12. 16     while(*string)  
  13. 17     {  
  14. 18         if(isupper(*string))  
  15. 19             *string=tolower(*string);  
  16. 20         string++;  
  17. 21     }  
  18. 22     *string='\0';  
  19. 23     return 0;  
  20. 24 }  
  21.    
  22. 47 void main()  
  23. 48 {  
  24. 49     char *test="ABCDEFGhijklmN";  
  25. 50     strlower(test);  
  26. 51     cout<<test<<endl;  
  27. 52 }  
其中,如果采用char *test=”ABCDEFGhijklmN”;会产生运行时错误。Char test[]=”ABCDEFGhijklmN”则程序正常运行,原因如前所述。


数组名作为函数参数原理:

在C语言中,我们没有办法可以将一个数组作为函数参数直接传递。如果我们使用数组名作为参数,那么数组名会立即被转换为指向该数组第1个元素的指针。例如,下面的语句:
char hello[] = "hello";
声明了hello是一个字符数组。如果将该数组作为参数传递给一个函数,
printf ("%s\n", hello);
实际上与将该数组第1个元素的地址作为参数传递给函数的作用完全等效,即:
printf ("%s\n", &hello[0]);
因此,将数组作为函数参数毫无意义。所以,C语言中会自动地将作为参数的数组声明转换为相应的指针声明。也就是说,像这样的写法:
int strlen (char s[])
{
    ...
}

与下面的写法完全相同:
int strlen (char *s)
{
    ...
}


 


  

0 0
原创粉丝点击