标签:字符串 font new 字符串常量 style mes char s 直接 mil
在C语言中,表示一个字符串我们可以用数组如char str[] = "abc",也可以用指针char *str = "abc",那二者有何区别呢?
1、数组字符串存放在全局数据区或栈区,可读可写;指针字符串存放在常量区,可读不可写。
数组字符串:
char str[] = "abcd";
puts(str); // 可读
str[0] = ‘m‘; // 可写
指针字符串:
char *str = "abcd";
puts(str); // 可读
str[0] = ‘m‘; // 错误,不可写
2、字符串常量不可以直接赋值给数组名;但可以直接赋值给字符指针。
数组字符串:
char str[10];
str = "abcd"; // 错误,不可赋值。但可以用strcpy(str, "abc")来赋值。
指针字符串:
char *str;
str = "abcd"; // 正确
之所以产生这种现象,是因为双引号在编译过程中提供了如下功能:
(1)申请了内存空间(常量区),存放字符串;
(2)在字符串末尾加上‘\0‘;
(3)返回一个地址;
数组str[10]和指针*str中的str都是指地址,但数组的地址是一个常量,所以不可进行赋值,即将一个值(地址,由双引号申请的地址)赋给一个常量(常量地址);但指针是一个变量,所以可以被赋值。
标签:字符串 font new 字符串常量 style mes char s 直接 mil
原文地址:https://www.cnblogs.com/programmer-home/p/12925704.html