C解析字符串的存储,char *str和char str[]分析

首先我们需要知道主要的数据存储位置

**1、栈(动态存储方式,如局部变量,用完自动销毁)
2、堆(如malloc申请内存,用完需要手动回收内存)
3、静态存储区(静态存储方式,全局变量和静态变量,程序开始就一直存在)
4、常量存储区(里面存放的是常量,不允许修改)**

有这些基本知识后,接下来进一步分析

char *str = "hello";

解析:
str是一个char型指针变量,它指向常量”hello”字符串所在的首地址
①:变量str保存在栈上
②:常量”hello”即保存在常量存储区

恩,我想把第一个字符改成’a’

*str='a';

很明显,这样会报错,因为常量不能改变,”hello”保存在内存常量区,程序编译完成时,这个值就确定了不能改变。

接下来

char str[] = "hello";

解析:
str是数组名,它是一个指针,指向变量”hello”字符串的首地址
①:str我们把它理解是数组名,是一个指针常量(注意不是变量,只是数组名的命名方法和变量一样!!)
②:字符串”hello”,保存在栈上

恩,我自增一下

str++;

很明显,str++;是错误的语法,因为不是变量(这里需要注意:char str[] 作参数时,char str[]是当做char *str使用,即str++不会报错 )

str+1;

str+1;是没问题,因为str是指针,所以+1就是偏移char个宽度,指向下一个字节的地址

&str

&str对数组名取地址,即&str是代表整个数组的地址。&str是一个宽度是数组的长度(即sizeof(str))的指针。

*str='a';

改变第一个字符的值,因为是变量,没问题。字符成为“aello”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值