目录:

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

二、C语言中数组的赋值

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

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

三、附录

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

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

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

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

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

结果:

对比:

结果:

把字符串加到指针所指的字串上去,出现段错误,本质原因:*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语言使用相关汇总2之16、堆、栈、存储区。

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

二、C语言中数组的赋值

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

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

#include "stdio.h"void main()
{char *s="hello";char a[10]={"0"};int i;for(i=0;i<strlen(s);i++)a[i] = s[i];printf("%s\n",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的指针。

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

C语言-char_*a与char_a[]的区别相关推荐

  1. 强类型语言和静态类型语言有什么区别?

    另外,一方是否意味着另一方? #1楼 强类型意味着类型之间的转换之间存在限制. 静态类型意味着类型不是动态的 - 一旦创建变量,就无法更改变量的类型. #2楼 这经常被误解,所以让我澄清一下. 静态/ ...

  2. c语言 python-C语言和python的区别

    Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...

  3. run在java_Java语言start和run方法的区别

    Java语言start和run方法的区别 导语:Thread类定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法.那么它和start方法有什么不同呢?让我们了解一下吧! 调用start ...

  4. C语言 scanf()和gets()函数的区别

    C语言 scanf()和gets()函数的区别 1.相同点:scanf( )函数和gets( )函数都可用于输入字符串 2.不同点:两者在功能上有所区别,具体区别如下: 要实现如下需求"从控 ...

  5. C语言 vprintf 函数和 printf 函数区别 - C语言零基础入门教程

    目录 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明 2.vprintf 函数声明 二.vprintf 函数和 printf 函数使用 三.猜你喜欢 零基础 C/C ...

  6. C语言 #include <> 与 #include “” 区别 - C语言零基础入门教程

    目录 一.什么是头文件 二.#include <> 三.#include "" 四.#include <> 与 #include "" ...

  7. C语言 函数指针和指针函数区别 - C语言零基础入门教程

    目录 一.函数指针和指针函数声明的区别 1.函数指针 2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用 2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/ ...

  8. C语言 指针数组和数组指针区别 - C语言零基础入门教程

    目录 一.简介 1.数组 2.指针 3.指针和数组区别 二.指针数组和数组指针区别 1.指针数组 2.数组指针 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> ...

  9. C语言和C++语言在语法上面的部分区别

    (2011-03-16 17:12:13) 标签: 杂谈 分类:计算机 C语言和C++语言在语法上面的部分区别: 1.C语言的定义必须在最前面,C++可以在任何地方定义,比如 for(int i=0; ...

最新文章

  1. SAP Spartacus B2cStorefrontModule里提供的默认配置
  2. spring aop 中@annotation()和自定义注解的使用
  3. 2021快手电商数据报告
  4. Qt实践录:TCP网络调试助手
  5. PHP获取汉字首字母并分组排序
  6. 《Python入门到精通》流程控制语句
  7. 教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
  8. Python开发环境搭建方法简述
  9. matlab神经网络预测模型,matlab人工神经网络预测
  10. VMware ESXi定制版(OEM ISO)资源下载(包含5.1\5.5\6.0)
  11. MOS管导通条件概述-过程-压降-提高效率等详解
  12. 点桌面计算机一直在加载,Win7系统在桌面点右键一直转圈的解决方法
  13. 2016民用安防2.0时代重新起航
  14. 《硅谷增长黑客实战笔记》读书笔记(一)
  15. java面试基础题整理(二)
  16. linux设置共享文件夹和删除共享文件夹(vmware:linux-windows共享文件夹)
  17. 虚拟机安装系统的网络配置问题(Contos7版)
  18. 【vue项目实战】如何使用icon图标
  19. 怎么退出自适应巡航_买车选配置,自适应巡航or定速巡航
  20. ESP8266物联网台灯

热门文章

  1. office套件_Microsoft Office 2019 for Mac(office办公套件)
  2. 基于C语言的运动会成绩管理系统
  3. Promise 的错误处理方式
  4. java poi操作excel 添加 锁定单元格保护
  5. LCD1602液晶第一行静止不动,第二行向右滚动程序
  6. Li‘s 核磁共振影像数据处理-26-ITK-SNAP半自动勾画病灶
  7. 对于森林大火的肆虐,AI 能做些什么?
  8. Python的元组和字典
  9. java中的迭代和递归
  10. 学习笔记:SQL大厂面试题集