C语言的字符数组和字符串的区别

从定义到使用,书写格式,输入输出间的区别是什么?回答越详细,分数越高,我希望真正懂编程的朋友用自己的语言回答我。... 从定义到使用,书写格式,输入输出间的区别是什么?
回答越详细,分数越高,我希望真正懂编程的朋友用自己的语言回答我。
展开
 我来答
飘渺世间天
推荐于2017-09-27 · TA获得超过2650个赞
知道大有可为答主
回答量:843
采纳率:0%
帮助的人:1107万
展开全部
通常字符数组中的所存储的内容也可以称为字符串, 但我想你想表达的意思可能是对于:

char *p1 = "A String.";



char p2[] = "Another String.";

这两种写法的不同吧.

p1指向的这个字符串是个常量, 不可改变, 程序在编译期间就为"A String."这个字符串分配了固定的空间, 它被存储在全局静态区中.

而p2是个变量, 其内容可以被更新和改变, p2可以理解为一个不可改变其指向位置的指针, 即char * const p2, 它所占用的内存在程序运行时被自动分配和释放, 而p1占用的内存要等到整个程序结束时才被释放.

再看:

#include <stdio.h>

int g; // 存储在全局静态区

int main()
{
char* p1 = "haha"; // 和g一样
char p2[] = "haha"; // 堆栈中

printf("%x %x %x", &g, p1, p2);
}

你可以看出p1和g的位置距离很近, 而和p2相隔很远, 可以看出他们的确是被存储在不同的内存空间中的, 而且p1所指向的内容是常量, 不能改变, 不信你试试:

char* p = "This is the penalty!";
*p = 't';

所以声明指向常量字符串的指针时最好这样:

const char* p = "...";

另外任何出现在程序中以""括起的内容如果不是被存储在变量中那么它就是常量, 和上面的p1指向的类型相同, 比如:

printf("abc %d", 1);

其中的"abc %d"也是常量;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Rumblet
推荐于2017-10-13 · TA获得超过567个赞
知道小有建树答主
回答量:231
采纳率:100%
帮助的人:69.1万
展开全部
C语言字符数组和字符串的区别,字符数组是一个存储字符的数组,而字符串是一个用双括号括起来的以'\0'结束的字符序列,虽然字符串是存储在字符数组中的,但是一定要注意字符串的结束标志是'\0'。

总的来说是没有区别的,字符串就是以字符数组形式存储的。可以把一个字符串看成是一个字符数组,可以按数组那样操作。两者没有本质的区别,只是在不同的情况下有不同的叫法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
推荐于2019-11-07 · TA获得超过25.9万个赞
知道小有建树答主
回答量:2206
采纳率:96%
帮助的人:82.1万
展开全部

C语言中没有用于表示字符串的关键字以数组形式将字符串输出。

字符串和字符数组的区别和联系:

C语言中没有一个用于表示字符串的关键字;

c语言的字符串由C的字符数组变形而成,末尾加上'\0';

字符串比字符数组多一个'\0';

例子如下:


两者联系:
都是一数组形式存储数据,字符之间地址连续,可以用下标来访问,同样的数据如果以字符数组和字符串存储大小有区别,字符串比字符数组大一个'\0'。

字符串常用的操作函数:
strlen :字符串长度
strcmp :字符串比较
strcpy :字符串拷贝
strcat :字符串拼接

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
XYYF9798
推荐于2019-09-21 · TA获得超过26.9万个赞
知道小有建树答主
回答量:83
采纳率:100%
帮助的人:4.8万
展开全部

p1指向的这个字符串是个常量, 不可改变, 程序在编译期间就为"A String."这个字符串分配了固定的空间, 它被存储在全局静态区中.

而p2是个变量, 其内容可以被更新和改变, p2可以理解为一个不可改变其指向位置的指针, 即char * const p2, 它所占用的内存在程序运行时被自动分配和释放, 而p1占用的内存要等到整个程序结束时才被释放.

拓展资料:

#include <stdio.h>int g; // 存储在全局静态区int main(){char* p1 = "haha"; // 和g一样
char p2[] = "haha"; // 堆栈中printf("%x %x %x", &g, p1, p2);}

你可以看出p1和g的位置距离很近, 而和p2相隔很远, 可以看出他们的确是被存储在不同的内存空间中的, 而且p1所指向的内容是常量, 不能改变, :char* p = "This is the penalty!";*p = 't';

所以声明指向常量字符串的指针时最好这样:const char* p = "...";另外任何出现在程序中以""括起的内容如果不是被存储在变量中那么它就是常量, 和上面的p1指向的类型相同, 比如:printf("abc %d", 1);其中的"abc %d"也是常量;



本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
armfly2008
2015-09-16 · 超过10用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:17.1万
展开全部
字符串要求0结束,保存字符串的数组需要占用的空间=字符串的长度+1
字符数组指保存字符的数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式