A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//
//存储字符串数据的两种方式:
//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;
}

3 个回复

倒序浏览
欢迎大家指正
回复 使用道具 举报
欢迎大家指正
回复 使用道具 举报
加油,加油,总结不错
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马