目录:
一、char *a与char a[]的区别
二、C语言中数组的赋值
三、附录
-----------------------------------------------------------------------------------------------
一、char *a与char a[]的区别
char *a = "hello" 中的a是指向第一个字符‘h'的一个指针;
char a[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针。
但二者并不相同,看如下把两个字符串相加(strcat函数见附录)的实例:
结果:
对比:
结果:
把字符串加到指针所指的字串上去,出现段错误,本质原因:*d="0123456789"存放在常量区,是无法修改的。而数组是存放在中,是可以修改的。两者区别如下:
1、读写能力
char *a = "abcd"; //"abcd"存放在常量存储区,通过指针只可以访问字符串常量,而不可以改变它
c语言char的用法
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、自己将数组中的内容赋值
因为 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的指针。
-----------------------------------------------------------------------------------------------

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。