2024年C C++最全【C C++】对char 和 char[]区别的一些理解,一文带你搞懂C C++多线程Handler

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

相同点

首先 这两种类型都可以对应一个字符串,比如:
char * a=”string1”;
char b[]=”string2”;
printf(“a=%s, b=%s”, a, b);
其中a是一个指向char变量的指针,b则是一个char数组(字符数组),

其次 ,很多时候二者可以混用,像函数传参数的时候,实参可以是char*,形参可以是 char[],比如:
void fun1(char b[]){
printf(“%s”,b);
}
int main(){
char *a=“HellowWorld”;
fun1(a);
}
反过来,实参可以是char[],形参可以是 char *也是可以的。
存在即合理,char *和char[]肯定是有本质的不同。

不同点

1.char*是变量,值可以改变, char[]是常量,值不能改变。
比如:
char * a=”string1”;
char b[]=”string2”;
a=b; //OK
a=”string3”; //OK
b=a; //报错!左边操作数只读
b=”string3” //报错!左边操作数只读

解释: a是一个char型指针变量,其值(指向)可以改变;
b是一个char型数组的名字,也是该数组首元素的地址,是常量,其值不可以改变 。

2.char[]对应的内存区域总是可写,char*指向的区域有时可写,有时只读
比如:
char * a=”string1”;
char b[]=”string2”;
gets(a); //试图将读入的字符串保存到a指向的区域,运行崩溃!
gets(b) //OK
解释: a指向的是一个字符串常量,即指向的内存区域只读;
b始终指向他所代表的数组在内存中的位置,始终可写!
注意,若改成这样gets(a)就合法了:
char * a=”string1”;
char b[]=”string2”;
a=b; //a,b指向同一个区域,注意这里改变了a的指向
gets(a) //OK
printf(“%s”,b) //会出现gets(a)时输入的结果
解释: a的值变成了是字符数组首地址,即&b[0],该地址指向的区域是char *或者说 char[8],习惯上称该类型为字符数组,其实也可以称之为“字符串变量”,区域可读可写。

注意:char *本身是一个字符指针变量,但是它既可以指向字符串常量,又可以指向字符串变量,指向的类型决定了对应的字符串能不能改变。

3.char * 和char[]的初始化操作有着根本区别:

测试代码: char *a=”Hello World”;
char b[]=”Hello World”;
printf(“%s, %d\n”,”Hello World”, “Hello World”);
printf(“%s, %d %d\n”, a, a, &a);
printf(“%s, %d %d\n”, b, b, &b);
结果:

这里写图片描述

结果可见:尽管都对应了相同的字符串,但”Hellow World”的地址 和 a对应的地址相同,与b指向的地址有较大差异;&a 、&b都是在同一内存区域,且&bb
根据c内存区域划分知识,我们知道,局部变量都创建在栈区,而常量都创建在文字常量区,显然,a、b都是栈区的变量,但是a指向了常量(字符串常量),b则指向了变量(字符数组),指向了自己(&b
b==&b[0])。

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值