码迷,mamicode.com
首页 > 编程语言 > 详细

数组字符串和指针字符串

时间:2020-05-20 20:14:04      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:字符串   font   new   字符串常量   style   mes   char s   直接   mil   

在C语言中,表示一个字符串我们可以用数组如char str[] = "abc",也可以用指针char *str = "abc",那二者有何区别呢?

 

1、数组字符串存放在全局数据区或栈区,可读可写;指针字符串存放在常量区,可读不可写。

数组字符串:
char str[] = "abcd";
puts(str);       // 可读
str[0] = ‘m‘;    // 可写

指针字符串:
char *str = "abcd";
puts(str);       // 可读
str[0] = ‘m‘;   // 错误,不可写

 

2、字符串常量不可以直接赋值给数组名;但可以直接赋值给字符指针。

数组字符串:
char str[10];
str = "abcd";     // 错误,不可赋值。但可以用strcpy(str, "abc")来赋值。

指针字符串:
char *str;
str = "abcd";     // 正确

 

之所以产生这种现象,是因为双引号在编译过程中提供了如下功能:

(1)申请了内存空间(常量区),存放字符串;
(2)在字符串末尾加上‘\0‘;
(3)返回一个地址;
数组str[10]和指针*str中的str都是指地址,但数组的地址是一个常量,所以不可进行赋值,即将一个值(地址,由双引号申请的地址)赋给一个常量(常量地址);但指针是一个变量,所以可以被赋值。

数组字符串和指针字符串

标签:字符串   font   new   字符串常量   style   mes   char s   直接   mil   

原文地址:https://www.cnblogs.com/programmer-home/p/12925704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!