码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-08-31 22:22:30      阅读:742      评论:0      收藏:0      [点我收藏+]

标签:

写作日期: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的区别

标签:

原文地址:http://www.cnblogs.com/rixiang/p/5827606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!