加载中…
个人资料
liht1634
liht1634
  • 博客等级:
  • 博客积分:0
  • 博客访问:223,741
  • 关注人气:58
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

C语言-char_*a与char_a[]的区别

(2017-01-09 11:42:21)
标签:

char_a

char_a[]

分类: 编程类

目录:

一、char *a与char a[]的区别

二、C语言中数组的赋值

三、附录


-----------------------------------------------------------------------------------------------

一、char *a与char a[]的区别

char *a = "hello" 中的a是指向第一个字符‘h'的一个指针;

char a[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针。

但二者并不相同,看如下把两个字符串相加(strcat函数见附录)的实例:

C语言-char_*a与char_a[]的区别

结果:

C语言-char_*a与char_a[]的区别

对比:

C语言-char_*a与char_a[]的区别

结果:

C语言-char_*a与char_a[]的区别

把字符串加到指针所指的字串上去,出现段错误,本质原因:*d="0123456789"存放在常量区,是无法修的。而数组是存放在中,是可以修改的。两者区别如下:

1能力

char *a = "abcd"; //"abcd"存放在常量存储区,通过指针只可以访问字符串常量,而不可以改变它

char a[20] = "abcd"//"abcd"存放在,可以通过指针去访问和修改数组内容

2赋值时刻

char *a = "abcd"; //在编译时就确定了(因为是常量)

char a[20] = "abcd"; //在运行时确定

3、存取效率

char *a = "abcd"; //存于常量存储区上的数组比指针所指向字符串快,因此慢

char a[20] = "abcd"; //存于上,因此

4、另外注意:

1)char a[] = "01234",虽然没有指明字符串的长度,但是此时系统已经开辟好了,就是大小为6('0' '1' '2' '3' '4' '5' '\0')。

2)另外注意strlen(a)是不计‘\0’。

注:内存分配方式详见编程类/C语言使用相关汇总二16、堆、栈、存储区


-----------------------------------------------------------------------------------------------

二、C语言中数组的赋值

如果已声明某变量如a为数组(比如char数组),则不能用=号给它赋值(除了初始化之外)!也就是说除了初始化,再不能将数组放在=号左边!

若想对char数组另外赋值见下两例:

1、自己将数组中的内容赋值

C语言-char_*a与char_a[]的区别

因为 char *s="hello"; 就等于声明了s[]=="hello";

2、使用string.h标准库中的函数:strcpy

#include "stdio.h"

#include "string.h"

int main()

{

  char *s="hello";

  char a[10]={"0"};

  strcpy(a,s); //拷贝s字符串到a中

  return 0;

}


-----------------------------------------------------------------------------------------------

三、附录

strcat原型:extern char *strcat(char *dest, const char *src);

strcat功能:将两个char类型连接,src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针


-----------------------------------------------------------------------------------------------

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有