c语言中字母的定义,c语言字符串定义与初始化 - 且听风吟

字符串的两种定义方式

char数组

char sa[] = “hello world”;

char指针

char *sp = “hello world”;

这两种方式都产生了一个”hello world”的字符串常量,字符串常量存储在静态存储区中,静态存储区中的内容在程序运行的整个过程中都存在,而且只存储一份。

数组与指针的关系

在第一种定义中,字符串常量在编译时就已经分配好了空间,但直到运行时才会为数组分配存储空间,这时,存储在静态存储区中的字符串常量会被拷贝一份到数组中,此后,数组名sa与&sa[0]等价。重要的是,sa是一个常量,你不能修改sa的值,你可以通过sa+1来标识数组里的下一个元素,也可以修改数组里的元素。然而,sa++是不允许的,因为自增运算符只能作用于变量而不是常量。

第二种定义中,程序运行时只为指针变量sp分配了存储空间,用来字符串常量”hello world”的地址,这时,字符串常量没有被拷贝。sp的值是可以改变的,如++sp将指向字符e。

总之,数组初始化是从静态存储区中把一个字符串拷贝给数组,而指针初始化只是复制这个字符串的地址。

示例

#include

int main(int args, char **argv) {

char sa[] = "hello world";

char *sp = "hello world";

// sa++; 错误,sa是常量

sp++;

sa[1] = 'M';

*(sa+2) = 'X';

// sp[1] = 'M'; // 错误,不能修改常量值

printf("%s\n", sa);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值