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

Posted NONE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ char* arr与char[] arr的区别相关的知识,希望对你有一定的参考价值。

写作日期:2016.08.31

交流qq:992591601

 

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

#include <stdio.h>

#define MAX_STR_SIZE 100

void 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的区别的主要内容,如果未能解决你的问题,请参考以下文章

将 char 数组转换为 uint16_t 数组 C/C++

编程之美书摘

C++怎么把string 转换为char型数组

Spirit X3:替代解析器的属性,不是`char`,而是`variant<ch​​ar, char>`

[c/c++] size_t是什么

C/C++ 中char类型如何转化short?