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