char *str 和 char str[] 的区别

相同点:
都是定义一个字符串
不同点:
1.含义上的区别
char str[] 是定义一个字符串数组,数组对应的是一块内存区域,而char *str 是定义一个指向字符串的指针,即指向一块内存区域。
数组的内存大小和其地址在作用域里是固定不变的,只有它存储的内容可以改变;而指针却不同,它指向的内存区域的大小随时可以改变,而且当指针指向常量字符串时,它指向的内容是不可以被修改的,否则在运行时会报错。
看一个例子:

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[] = "Hello";
    char str2[] = "World";
    strcpy(str1,str2);
    printf("%s\n",str1);
    return 0;
}

上面这段代码是可以运行的,因为数组的内容是可以被修改的。
再看下面这段代码:

#include<stdio.h>
#include<string.h>
int main()
{
    char *str1 = "Hello";
    char *str2 = "World";
    strcpy(str1,str2);
    printf("%s\n",str1);
    return 0;
}

这段代码在编译时不会报错,但是在运行时结果会出错,原因在于这段代码企图修改 str1 的内容,由于 str1 和 str2 是指向常量字符串的指针,其内容是不可被修改的,所以在运行时会出错。
2.计算内存的区别
用 sizeof 可以直接计算出数组的字节数;而指针的大小只与编译器所处的平台有关,在32位平台上(例如X86)指针占4个字节,而在64位平台上(例如X64)指针占8个字节。
另外在进行参数传递时,数组会退化成为同类型的指针。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值