Char[] 与char *

本文介绍了C语言中Char*和Char[]在存储区域和使用上的差异。Char*指向常量存储区,不允许修改,而Char[]存储在栈上,可以修改。通过示例展示了它们在指针操作和作为函数参数时的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言 数据存储区域:

1、:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量函数参数等。 
2、:就是那些由new或malloc分配的内存块,在不适用时,要手动用delete或free来释放内存区域。
3、 存储全局/静态区全局变量静态变量被分配到同一块内存中,他们共同占用同一块内存区。 
4、 常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多) 


    char *a = "hello";
    char b[3] = "world";

char *a 存储在常量存储区不能执行赋值操作,char *s定义了一个char型的指针,它只知道所指向的内存单元,并不知道这个内存单元有多大,所以当char *s = "hello";后,不能使用s[0]='a';语句进行赋值。这是将提示内存不能为"written"。

但charb[] 存放在区域内,可以修改,也就是常规的数组操作
    char *s1 = "hello";
    char s2[] = "hello";
    char *s3 = s2;                //★注意这句必须要★
    char **s4 = &s3;            //s2(char[])要用两步才能完成赋值 
    char **s5 = &s1;            //s1(char*) 只需一步
    char(*s6)[6] = &s2;            //&s2等价于char(*)[6]:指向包含6个char型元素的一维数组的指针变量
    printf("\n size of s1: %d \n", sizeof(s1));
    printf("\n size of s2: %d \n", sizeof(s2));


对函数进行传递参数时,char *和char[]都直接使用地址传递,当传递的函数参量为const char*p时,直接使用(a)/(b)就可以。
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值