c语言数组详解 编程开发教程

  次阅读 来源:互联网(转载协议) 2016-01-19 12:57 我要评论(0)

这篇文章主要介绍了c语言数组,有需要的朋友可以参考一下

一 数组名是什么

数组就是一段连续可用的内存。

比如声明一个 int数组

int array[]={1,2,3};

array代表什么?有的资料说:数组名是指向数组首地址的常量指针。

下面我们可以验证一下。

我都知道sizeof操作符可以返回一个对象或者类型所占的内存字节数。

如:

int i=1;

那么sizeof(i) 的结果就是4(64位机器下的部分编译器是8)

那我们打印sizeof(array)

printf("%dn",sizeof(array));

结果是:12。

但是我们都知道sizeof(指针变量)==4的。

所有我们得出:数组名不完全是指向数组首地址的常量指针。

为什么要用不完全,因为我们利用数组来访问数组元素的时候。它又变得像一个常量指针。

比如

array[0]等效于*(array+0)

这时候 array就是一个指向数组首地址的常量指针,指针类型是指向数组元素类型的指针。这里就是 int*类型

我们可以这样理解:

一个大学的名字叫array。

有人问你array是什么。你会告诉他array是大学,面积多少之类的。

但是有人问你去array怎么走,你会告诉他array的校门(首地址)在哪里。

结论:数组名其实代表的是一个内存区域,但是使用的时候变成了 指向数组首地址的常量指针。

但是这里还有一个小陷阱:

代码如下:

#include <stdio.h>

void foo(int a[])

{

printf("%dn",sizeof(a));

}

int main(void)

{

int array[]={1,2,3};

foo(array);

return 0;

}

输出的不是12,而是4。

出于效率的考虑,数组传参是引用传参而不是拷贝传参。因为数组长度可能很大,拷贝一份的话太耗资源。

虽然我是这样函数是这样的

代码如下:

void foo(int a[])

{

printf("%dn",sizeof(a));

}

编译器的眼中是这样

代码如下:

void foo(int *a)

{

printf("%dn",sizeof(a));

}

所以sizeof(a)是sizeof(指针变量)肯定是4;

二 字符数组

首先我们看一个简单的程序

代码如下:

# include <stdio.h>

int main(void)

{

char *str1="abc";

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 让AI触手可及  Qualcomm携手创通联达推出全新终端侧AI开发套件

    让AI触手可及 Qualcomm携手创通联达推出全新终端侧AI开发套件

  • 品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

    品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

  • 长虹新款智能语音空调,告诉你空调也能玩Siri

    长虹新款智能语音空调,告诉你空调也能玩Siri

  • 第一批国家重点研发计划公布,旷视科技开启“五年行动”

    第一批国家重点研发计划公布,旷视科技开启“五年行动”

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...