【c语言】为什么字符串可以直接赋值给字符数组

问题: a. 为什么字符数组可以直接使用字符串赋值,如char * s="hello,world!"

            b. 字符数组和字符串又是什么关系?

a. 字符串常量是一个字符数组

b. 字符串常量是可以通过指向其第一个元素的指针访问 

(摘自于在丹尼斯.里奇的《C语言程序设计》P103,第5章第5节)

字符数组可以赋值给字符指针( char array[]={'a','b'} ;  char * p =arry;),所以字符串就可以直接赋值给字符数组。 过程如下:

1 . 定义一个字符数组(字符串),程序运行时,系统申请一块内存地址存放这些字符。

2. 如果将字符数组或字符串赋值给字符指针时,系统其实是把字符数组(字符串)的首地址放到指针变量中(也叫指针指向首个字符地址)

#include <stdio.h>
#include <stdlib.h>

int main()
{
	

	char * c="hello,world!";
	printf("字符串为        :%s\n" ,c);    /*    打印出字符串    */
	printf("字符串开始地址为 :%p\n" ,c);    /*    打印出字符串首地址    */

	system("pause");
	
}

​

运行结果为:

如上图,对于同一个字符指针变量c, 可以通过 printf("%s",c) 输出字符串内容“hello,world”,因为C语言规定 字符串常量是可以通过指向其第一个元素的指针访问  ;printf("%p",c)可以输出字符串的首个地址00305774,因为指针本身就是一个存放(指向)地址的变量。

实际上C语言中没有提供整个字符串做为一个整体进行处理的运算符,那么想要对整个字符串整体操作,只能对指向它的指针操作。标准库中 的string,对字符串的操作,其实就是对其指针的操作。

小提示:

 

char * pMsg="hello"; printf("%s\n",pMsg) /*    打印的是字符串 hello   */
​
char * pMsg="hello"; printf("%c\n",*pMsg);    /*    打印的是字符h    */
char * pMsg="hello"; printf("%x\n",pMsg) /*    打印的是地址   */
​

如果码友对此有更好更通俗易懂的解释,请在下方留言!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值