char *s=“hello” 和 char s[]=“hello”的 区别

#include<stdio.h>
int main()
{

char *s1 = "hello"; char s2[] = "hello";

//s1[0]='a'; //×运行ERROR( 这一句编译可过,但是运行直接就崩了)

s2[0]='a'; //OK

puts(s1);

puts(s2);

return 0;

}


两者的区别悬殊!char *s1="hello"这个是一个字符串常量,你可以像一个字符数组一样使用它,但是你不能更改这个字符串的值比如 s1[0]='e'这样不行,char s2[]="hello";是一个字符串变量,可以被修改。
不过,这两者再作函数的形参的时候是完全等价的。
 void function(char *pstr);
  void function(char pstr[]);
  可以相当绝对的说这两种完全等价,没有任何区别。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`char s[] = "hello"` 和 `char *s = "hello"` 都可以用来表示一个字符串,但是它们有以下不同点: 1. 内存分配方式不同:`char s[] = "hello"` 定义了一个字符数组,编译器会在栈上为它分配足够的空间,将字符串 "hello" 复制到其中,并在末尾添加一个空字符 '\0'。而 `char *s = "hello"` 定义了一个字符指针,编译器会将字符串 "hello" 存储在只读数据段(read-only data segment)中,然后将这个字符串的地址赋值给指针 s。因此,`char s[] = "hello"` 的字符串内容可以被修改,而 `char *s = "hello"` 的字符串内容是只读的,不能被修改。 2. 大小不同:`char s[] = "hello"` 中定义的字符数组大小为 6(包括末尾的空字符 '\0'),而 `char *s = "hello"` 中定义的指针变量大小为指针的大小,通常为 4 或 8 个字节,具体取决于编译器和操作系统的位数。 3. 内存位置不同:`char s[] = "hello"` 中定义的字符数组存储在栈上,而 `char *s = "hello"` 中定义的字符串常量存储在只读数据段中。 4. 初始化方式不同:`char s[] = "hello"` 是通过数组初始化的方式来定义字符串,而 `char *s = "hello"` 是通过指针初始化的方式来定义字符串。 需要注意的是,虽然 `char *s = "hello"` 中定义的字符串常量是只读的,但是可以通过将它赋值给另一个字符数组或指针变量来实现对字符串内容的修改。但是这种做法可能会导致内存泄漏和未定义行为的问题,因此在实际开发中应该避免这种做法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值