黑马程序员技术交流社区

标题: 存储字符串数据的两种方式以及两种存储方式的区别(个人整理) [打印本页]

作者: xuezhangjun    时间: 2016-11-9 21:44
标题: 存储字符串数据的两种方式以及两种存储方式的区别(个人整理)
//
//存储字符串数据的两种方式:
//1> 使用字符数组来存储: 将字符串数据的每一个字符存储到数组的元素中,并自动追加一个'\0'表示结束.
//char name[] = "jack";

//2>使用字符指针来存储: 直接为一个字符指针初始化一个字符串数据.
//char *name = "jack";


/*
两种存储字符串方式的区别

1>当都是局部变量的时候
char name1[] = "jack";
char *name2 = "rose";

name1字符数组,声明在栈区,字符串的每一个字符数据存储在字符数组中的每一个元素当中.

name2是一个局部的指针变量,声明在栈区.但是字符串数据是存储在常量区的,字符串数据以字符数组的形式存储在常量区.name2指针变量中存储的是"rose"这个字符串在常量区的地址.

2>当都是全局变量的时候
char name1[] = "jack";
char 8name2 = "rose";

name1字符数组是存储在常量区的,字符串的每一个字符是存储在数组的每一个元素当中.

name2指针也是存储在常量区中的,字符串也是以字符数组的形式存储在常量区.name2指针中存储的是"rose"这个字符串在敞亮去的地址.

区别:

1> 存储结构不同
以字符数组存储:无论如何是一个字符数组,然后字符串的每一个字符存储在数组的元素之中.
以字符指针存储:无论如何首先有一个字符指针变量,字符串数据是以字符数组的形式存储在常量区的.

2> 用数组方式定义的字符串可以修改,用指针指向的字符串不能修改.
以字符数组的形式存储字符串数据,不管是全局还是局部的,都可以使用下标去修改字符数组中的每一个元素.
以字符指针的形式存储的字符串数据,这个时候字符指针指向的字符串数据是无法修改的.
以字符指针形式存储的字符串数据,不管是全局的还是局部的,都不能通过指针去修改指向的字符串数据.



*/
#include <stdio.h>

char name3[] = "xiaoxue";
char *name4 = "xiaohua";
int main()
{
    //两个局部变量字符数组name1和字符指针name2的地址不在同一个区域内
    char name1[] = "jack";
    char *name2 = "rose";
    printf("name1 = %p\n", name1);
    printf("name2 = %p\n", name2);
   
    //两个全局变量字符数组name3和字符指针name4的地址是在同一个区域的
    printf("name3 = %p\n", name3);
    printf("name4 = %p\n", name4);
   
   
    //修改字符串的值
    //字符数组name1是局部变量
    name1[0] = 'a';
    printf("name1 = %s\n", name1);
    //字符数组name3是全局变量
    name3[0] = 'a';
    printf("name3 = %s\n", name3);
   
    //以下以字符指针存储的字符串数据的值是无法修改的
    //字符指针name2是局部变量
//    name2[0] = 'a';
//    printf("name2 = %s\n", name2);
    //字符指针name4是全局变量
//    name4[0] = 'a';
//    printf("name4 = %s\n", name4);
   
    return 0;
}
作者: xuezhangjun    时间: 2016-11-9 21:46
欢迎大家指正
作者: xuezhangjun    时间: 2016-11-9 21:50
欢迎大家指正
作者: shy4458    时间: 2016-11-9 22:14
加油,加油,总结不错





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2