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++