char s[] 和 char *s 的区别

不同点:

1.在声明时

char s1=“hello”;//声明一个指针指向常量"hello"
char s2[]=“hello”;//在栈中开辟一个数组字符"hello";
/
* s2[]=“hello” 相当于

  • char s2[6];
  • s2[0]=‘h’;
  • s2[1]=‘e’;
  • s2[2]=‘l’;
  • s2[3]=‘l’;
  • s2[4]=‘0’;
  • s2[5]=’\0’;
    **/

说明:

s1内容不能修改,因为他指向常量
s2内容可以修改,因为他指代内存中的变量区
s2其地址和容量在生命期里不能改变

2.使用时

char str[255];//声明一个字符数组str占255个字节
char *p;//声明一个字符串指针p
char *sp;//声明一个字符串指针sp

sp = str;/实际上是 sp=&str; 编译器做过处理/
//需要有一个指针来保存原先地址
p=sp;
*(sp++)=‘1’;
*(sp++)=‘2’;
sp++=‘3’;//相当于(sp++)
*sp++=‘4’;
*sp++=‘5’;
*sp=’\0’;
printf("%s\n",p);

printf("%p\n",p);
printf("%p\n",&str);
printf("%p\n",sp-5);
printf("%s\n",(sp-5));

//等同于===============================================
`int i=0;
char str[255];//声明一个字符数组str占255个字节
char *p;//声明一个字符串指针p

p=str;
str[i++]=‘1’;
str[i++]=‘2’;
str[i++]=‘3’;
str[i++]=‘4’;
str[i++]=‘5’;
str[i]=’\0’;

printf("%s\n",p);
printf("%p\n",p);`

说明:

char str[] 实际是一个(字符数组)指针,不是(字符)指针
char str[] 不是一个真实意义(声明的)的指针类型,不能进行正常指针的加减计算操作
char *p是一个指针类型可以进行计算操作

相同点:
1.作为形参完全相同
例:

void function(char *s1);
void function(char s1[]);

2.只读取不修改的时候
例:

char *s1=“hello”;
char s2[]=“hello”;
printf(“s1[1]=[%c]\n”,s1[1]); //s1[1]=[e]
printf(“s2[1]=[%c]\n”,s2[1]); //s2[1]=[e]
printf(“s1=[%s]\n”,s1); //s1=[hello]
printf(“s2=[%s]\n”,s2); //s2=[hello]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值