C语言-char_*a与char_a[]的区别
目录:
一、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楼 强类型意味着类型之间的转换之间存在限制. 静态类型意味着类型不是动态的 - 一旦创建变量,就无法更改变量的类型. #2楼 这经常被误解,所以让我澄清一下. 静态/ ...
- c语言 python-C语言和python的区别
Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...
- run在java_Java语言start和run方法的区别
Java语言start和run方法的区别 导语:Thread类定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法.那么它和start方法有什么不同呢?让我们了解一下吧! 调用start ...
- C语言 scanf()和gets()函数的区别
C语言 scanf()和gets()函数的区别 1.相同点:scanf( )函数和gets( )函数都可用于输入字符串 2.不同点:两者在功能上有所区别,具体区别如下: 要实现如下需求"从控 ...
- C语言 vprintf 函数和 printf 函数区别 - C语言零基础入门教程
目录 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明 2.vprintf 函数声明 二.vprintf 函数和 printf 函数使用 三.猜你喜欢 零基础 C/C ...
- C语言 #include <> 与 #include “” 区别 - C语言零基础入门教程
目录 一.什么是头文件 二.#include <> 三.#include "" 四.#include <> 与 #include "" ...
- C语言 函数指针和指针函数区别 - C语言零基础入门教程
目录 一.函数指针和指针函数声明的区别 1.函数指针 2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用 2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/ ...
- C语言 指针数组和数组指针区别 - C语言零基础入门教程
目录 一.简介 1.数组 2.指针 3.指针和数组区别 二.指针数组和数组指针区别 1.指针数组 2.数组指针 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> ...
- C语言和C++语言在语法上面的部分区别
(2011-03-16 17:12:13) 标签: 杂谈 分类:计算机 C语言和C++语言在语法上面的部分区别: 1.C语言的定义必须在最前面,C++可以在任何地方定义,比如 for(int i=0; ...
最新文章
- SAP Spartacus B2cStorefrontModule里提供的默认配置
- spring aop 中@annotation()和自定义注解的使用
- 2021快手电商数据报告
- Qt实践录:TCP网络调试助手
- PHP获取汉字首字母并分组排序
- 《Python入门到精通》流程控制语句
- 教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
- Python开发环境搭建方法简述
- matlab神经网络预测模型,matlab人工神经网络预测
- VMware ESXi定制版(OEM ISO)资源下载(包含5.1\5.5\6.0)
- MOS管导通条件概述-过程-压降-提高效率等详解
- 点桌面计算机一直在加载,Win7系统在桌面点右键一直转圈的解决方法
- 2016民用安防2.0时代重新起航
- 《硅谷增长黑客实战笔记》读书笔记(一)
- java面试基础题整理(二)
- linux设置共享文件夹和删除共享文件夹(vmware:linux-windows共享文件夹)
- 虚拟机安装系统的网络配置问题(Contos7版)
- 【vue项目实战】如何使用icon图标
- 怎么退出自适应巡航_买车选配置,自适应巡航or定速巡航
- ESP8266物联网台灯