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

本文介绍了char* str和char[] str的区别,涉及内存分配、字符串常量与可变数组,以及sizeof和strlen函数的用法。重点讲解了双引号定义字符串的自动结束符和计算方式。

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

  • char *str = “hello”表示在动态变量区开辟一个存放指针的存储单元,指针变量名为str,这个str指向常量区的”hello”,因此不能更改这个字符串的值,比如 str[0]='e'这样不行。
  • char str[] = "hello"表示在动态变量区开辟一个能连续存放6字节的字符串数组,str是数组名称,其数组内容可以被修改,定义在函数中因为是局部变量不能return。

字符串数组定义

  • char s1[5] = {"abcd"}等同于 char s1[5] = "abcd"
    sizeof(s1) = 5strlen(s1) = 4
  • char s2[5] = {'a','b','c','d'}
    sizeof(s2) = 5strlen(s2) = 不确定数
  • char s3[] = {"abcd"}等同于 char s3[] = "abcd"
    sizeof(s3) = 5strlen(s3) = 4
  • char s4[] = {'a','b','c','d'}
    sizeof(s4) = 4strlen(s4) = 不确定数
    总结:定义成“ ”双引号格式的话,会自动加’\0’结束符,strlen计算字符串长度时遇到’\0’结束(其计算的长度不包括’\0’),sizeof是运算符,计算的是分配的内存大小。定义字符串的话尽量用char s[5] = “abcd”(要给’\0’留一个字节的位置)或者char s[] = “abcd”(最推荐)。

sizeof与strlen的区别详细参考: https://blog.youkuaiyun.com/magic_world_wow/article/details/80500473

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值