首页 > 代码库 > C/C++ char* arr与char[] arr的区别

C/C++ char* arr与char[] arr的区别

写作日期:2016.08.31

交流qq:992591601

 

用了几天时间复习了下C语言。对于C语言的字符串操作有些不习惯,于是作为练习,写下了下面这样错误的程序:

#include <stdio.h>#define MAX_STR_SIZE 100void copy_string(char* from, char* to) {    while (*to++ = *from++);}void swap_strs(char* str1, char* str2) {    char tmp[MAX_STR_SIZE];    copy_string(str1, tmp);    copy_string(str2, str1);    copy_string(tmp, str2);}void sort_strs_by_ascii(char* arr[3]) {    if (strcmp(arr[0], arr[1]) < 0)        swap_strs(arr[0], arr[1]);    if (strcmp(arr[1], arr[2]) < 0)        swap_strs(arr[1], arr[2]);    if (strcmp(arr[0], arr[1]) < 0)        swap_strs(arr[0], arr[1]);}int main() {    char* arr[3] = {"dd", "aa", "cc"};    sort_strs_by_ascii(arr);    for (int i = 0; i < 3; i++)         printf("%s\n", arr[i]);    return 0;}

这段程序写得当然不怎么样,主要是为了练习C语言,特意去使用一些东西,例如C字符串指针的,指针数组。

程序中的数组的中存放三个字符串指针。将该数组作为参数来通过sort_strs_by_ascii方法排序。但在字符串操作过程中报错。

 

之后我才了解,char* arr这样的字符串指针,指向的值是存放在常量区的,不可改写。但该指针可以随意指向其它的地址空间。

而char arr[]这样的数组指针虽然本质也是指针,指针指向的内容却是固定在数组的内存空间的。但该数组空间里的内容是可以改写的。

C/C++ char* arr与char[] arr的区别