char *a 和char a[] 的区别(指针和数组的区别)
2019独角兽企业重金招聘Python工程师标准>>>
在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有很大的区别的。
1.两者在含义上的区别。
数组对应着一块内存区域,而指针是指向一块内存区域。其地址和容量在生命期里不会改变,只有数组的内容可以改变;而指针却不同,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。
如:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
char*s1="123456789";
char*s2="123456";
strncpy(s1,s2,6);
printf("%s %s\n",s1,s2);
return0;
}
在编译时不会报错,但是在运行时会报错,原因在于企图改变s1的内容,由于s1,s2指向的是常量字符串,其内容是不可修改的,因此在运行时不会通过。而下面这个程序是可以运行通过的:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
char s1[10]="123456789";
char s2[10]="123456";
strncpy(s1,s2,6);
printf("%s %s\n",s1,s2);
return0;
}
在VC++ 6.0上可以编译运行通过,原因在于数组的内容是可以被修改的,这就充分体现了指针和数组的区别,并不是完全等价的。
2.计算内存容量的区别。
用运算符sizeof可以计算出数组的容量(字节数),而用sizeof却无法计算指针所指内存的容量,用sizeof(p)得到的结果永远是4或者 2(即指针变量所占内存单元的字节数,一般情况下指针变量占2个或4个字节的内存单元)。在进行参数传递时,数组会自动退化为同类型的指针。
看下面这段代码和运行结果:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void function(int a[])
{
printf("%d\n",sizeof(a));
}
int main(void)
{
int a[10]={1,2,3,4,5,6,7};
int*p=a;
printf("%d %d\n",sizeof(a),sizeof(p));
function(a);
return0;
}
运行结果为:
40 4
4
转:http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004808.html
转载于:https://my.oschina.net/lvguidong/blog/686033
char *a 和char a[] 的区别(指针和数组的区别)相关推荐
- 指针数组、数组指针、数组的区别与联系
指针数组.数组指针.数组的区别与联系! 一:基本定义 1.指针数组 char *arr[4] = {"hello", "world", "shannx ...
- C++指针和数组的区别(不能混用的情况)
通常情况下,C++中指针和数组是可以混用的,但是,在编写字符数组的全排列的时候,混用却出了问题,因此,今天特地mark一下,以备日后查找 这里整理的,不包括用new开辟的动态数组 1.数组一旦声明,我 ...
- C语言中指针和数组的区别
看<C专家编程>一书,看到数组与指针并不相同一章,遂做了一段测试: 代码: #include <stdio.h> #include <stdlib.h>int ma ...
- C语言中指针与数组的区别,C语言 指针与数组的详解及区别
C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...
- 指针—— char p[] 和 char *p
目录 1. char p[]和char *p ☆☆☆☆ 2. 3. 函数里的指针** 4.数组作为函数参数传递 5. 两数交换的那些坑 6. 函数参数为指针应小心 7. 数组指针 ** 8. 二 ...
- 指针和数组替换和区别
指针和数组替换和区别 指针和数组在很多方面都可以替换 为什么不直接用while(*str++ != '\0')涉及到了Lvalue和Rvalue的问题 // http://www.dotcpp.co ...
- 浅谈C中的指针和数组(一)
本文转载地址:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html 在原文的基础上加入自己的想法作为修改. 指针是C/C ...
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 什么是指针?什么是数组?指针和数组的关系?
什么是指针?什么是数组?指针和数组的关系? 形象地讲,我们可以把计算机的内存看作一条长街上的一排房屋,每个房间都可以容纳数据并通过一个房号来表识.而表示每个房间房号的值我们可以称为地址.或许这样的比喻 ...
最新文章
- 加密软件究竟有哪些作用呢?
- 从Linux上查看接口路由IP(吓一跳ip)
- pycharm设置开发模板
- [C++]动态规划系列之币值最大化
- 2017_9_20 生活记录
- java常用省份合集
- Linux下使用FDDB 测试MTCNN人脸检测模型生成 ROC 曲线
- AlphaGo已然独孤求败,通过人工智能解放鉴黄劳动力还会有多久?
- webpack5从零搭建一个项目
- 常用的人脸检测识别等数据集百度云下载
- 是面试官放水,还是实在公司太缺人?这都没挂,阿里巴巴原来这么容易进...
- 2023年还在问前端怎么学?一份前端学习指南
- 定制NFC卡片/ntag213芯片卡/手机NFC感应卡片
- 乌班图18下安装QQ
- 【xdoj难题集】1039: 饭桌上的游戏
- Bitdefender 发布GandCrab V5.2勒索病毒解密工具 (免费)
- 【codeforce 141D】Take-off Ramps 最短路问题
- “新工科”爆红!留学选专业这些专业一定要看
- Golang中Int32转换为int16丢失精度的具体过程
- 测试需要掌握的数据库sql知识(一):基本语句操作
热门文章
- java aes php_php和java的aes默认加密算法有点区别及解决方法。
- mysql update时数据不存在新增_mysql sql语句新增判断,存在修改,不存在新增
- java c++的区别_Java语言与C、C++之间的区别?
- requirednew基于xml配置日志不回滚_Elasticsearch配置IK分词器的远程词库
- elementui datetimepicker 移动端_在 Gitee 收获 2.5K Star,前后端分离的 RuoYi 它来了
- nginx+lua实现上传文件到OSS
- Angular应用中tsconfig.json文件配置说明及配置全局路径映射
- 数据结构学习系列文章合集
- python绝对值编程_Python-abs vs fabs
- h5大转盘抽奖源码后台_微信H5互动营销应该要如何做?