C/C++编程笔记:《C语言》——数组知识详解,学编程建议收藏!

时间:2022-10-09 17:59:24 | 浏览:2169

不要看这个图简单,底层就是这样的。数组是一个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙。这一点很重要,连续的内存为指针操作(通过指针来访问数组元素)和内存处理(整块内存的复制、写入等)提供了便利,这使


不要看这个图简单,底层就是这样的。数组是一个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙。

这一点很重要,连续的内存为指针操作(通过指针来访问数组元素)和内存处理(整块内存的复制、写入等)提供了便利,这使得数组可以作为缓存使用。

有同学估计要说什么叫做指针操作,听龙叔絮叨下。

1int arr[5]={1,2,3,4,5};2printf("%d ",arr[3]);

看上面的代码,学过数组都知道arr[3]是取第三个元素的值,那我就要问你了,怎么取到值的呢???

不要慌,龙叔告诉你其实就是指针操作。当我们声明并定义数组int arr[5] = {1,2,3,4,5},此时数组被分配了5个int大小的空间在栈上,并初始化了数组元素。我们都知道数组名代表数组的首元素的首地址,那么很明显就可以得到arr[3] = arr + 3。


数组的运算

1int a[]={1,2,3,4};

2printf("%d ",sizeof(a));

3printf("%d ",sizeof(a+0));

4printf("%d ",sizeof(*a));

5printf("%d ",sizeof(a+1));

6printf("%d ",sizeof(a[1]));

7printf("%d ",sizeof(&a));

8printf("%d ",sizeof(&a+1));

9printf("%d ",sizeof(&a[0]));

10printf("%d ",sizeof(&a[0]+1));

11//字符数组

12char arr[] = {"a","b","c","d","e","f"};

13printf("%d ", sizeof(arr));

14printf("%d ", sizeof(arr+0));

15printf("%d ", sizeof(*arr));

16printf("%d ", sizeof(arr[1]));

17printf("%d ", sizeof(&arr));

18printf("%d ", sizeof(&arr+1));

19printf("%d ", sizeof(&arr[0]+1));

20printf("%d ", strlen(arr));

21printf("%d ", strlen(arr+0));

22printf("%d ", strlen(*arr));

23printf("%d ", strlen(arr[1]));

24printf("%d ", strlen(&arr));

25printf("%d ", strlen(&arr+1));

26printf("%d ", strlen(&arr[0]+1));

27char *p = "abcdef";printf("%d ", sizeof(p));

28printf("%d ", sizeof(p+1));

29printf("%d ", sizeof(*p));

30printf("%d ", sizeof(p[0]));

31printf("%d ", sizeof(&p));

32printf("%d ", sizeof(&p+1));

33printf("%d ", sizeof(&p[0]+1));

34printf("%d ", strlen(p));

35printf("%d ", strlen(p+1));

36printf("%d ", strlen(*p));

37printf("%d ", strlen(p[0]));

38printf("%d ", strlen(&p));

39printf("%d ", strlen(&p+1));

40printf("%d ", strlen(&p[0]+1));

41//二维数组

42int a[3][4] = {0};

43printf("%d ",sizeof(a));

44printf("%d ",sizeof(a[0][0]));

45printf("%d ",sizeof(a[0]));

46printf("%d ",sizeof(a[0]+1));

47printf("%d ",sizeof(a+1));

48printf("%d ",sizeof(&a[0]+1));

49printf("%d ",sizeof(*a));

50printf("%d ",sizeof(a[3]));

就这几个运算,估计会难倒很多同学的,不信你可以把答案写出来之后在去跑一遍,全对找我拿红包


sizeof(数组名),代表整个数组的字节数;&数组名,代表取得整个数组的地址。

数组的一些特性

1、严格上说数组只有一维数组。n维数组是在一维数组里面存放一个(n-1)维数组,掌握以为数组即可。

2、数组的长度指的是数组的元素个数不是数组空间长度。sizeof()关键字即可获取数组总的字节数,在除以元素类型的字节数即可得到数组长度。

3、C语言并不会判断数组访问越界,需要程序员判断越界访问。eg: int arr[5] = {1,2,3,4,5}; int b = arr[10];,这样访问也是可以拿到元素的,天知道你访问的是谁的数据。

4、数组底层内存结构是连续的。正是由于数组结构的连续性便诞生了内存的友好性,数组分配内存是整块分配的,堆内存很友好;连续的内存是的访问内存效率高。

5、数组大小是固定不变的。需要改变大小就需要新开一块大内存的数组,把之前的元素拷贝过来,释放之前的内存。

6、数据根据下标随机访问的时间复杂度为 O(1)

7、数据的插入和删除很低效:

(1)如果删除数组末尾的数据,最好情况时间复杂度为 O(1)

(2)如果删除开头的数据,则最坏情况时间复杂度为 O(n)

(3)平均情况时间复杂度也为 O(n)。

数组常见问题

数组长度是一个非常量。

1int b;2scanf("%d",&b);3int arr[3*b];

不知道你曾经有没有写过这样的代码,反正我写过。数组的长度和内存是在程序编译时就已经确定了的。b的值是在运行时才确定的。有两个新名词,程序编译时&程序运行时

数组越界访问

1int arr[5]={1,2,3,4,5};2printf("%d ",arr[-1]);3printf("%d ",arr[1]);4printf("%d ",arr[4]);5printf("%d ",arr[5]);6printf("%d ",arr[6]);

肉眼可见的错误,编译器竟然没报错。


数组相关笔试题目

给你一个数组,求一个k值,使得前k个数的方差 + 后面n-k个数的方差最小 ,时间复杂度可以到O(n)。

给定一个n个整型元素的数组a,其中有一个元素出现次数超过n / 2,求这个元素。

给定一个含有n个元素的数组,找出数组中的两个元素X和Y使得abs(x-y)最小。

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…_A[i-1]A[i+1]…_A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)

利用数组可以出很多笔试题目,当然这些题目很多并不是考验数组本身特性大多是考算法基础的。本节就到这里了!

学习C/C++编程知识,想要成为一个更加优秀的程序员,或者你学习C/C++的时候有难度,可以关注+私信小编【C/C++编程】来笔者的C语言C++零基础编程学习基地,里面不仅有学习视频和文件资料,还有更多志同道合的朋友,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

相关资讯

又到这个病的高发季节,快收藏这份救命“地图“!

今年9月《吉祥三宝》中的“爸爸”因心梗不幸去世此外许多名人比如马季、侯耀文、高秀敏等都是被心梗夺走生命今天是“中国心梗救治日”秋冬季节是心梗的高发季节这再次提醒大家要当心!每37秒就有1人死于急性心梗今天是中国第5个“心梗救治日”。今年“心

9种眼科常见的近视眼矫治方法,建议收藏

近视的矫治方法有很多种,但所有方法都无法彻底治愈近视。目前眼科主要以预防、控制、矫正为主要治疗手段。眼科常见的9种近视眼矫治方法9种眼科常见的近视眼矫治方法如下:1、框架眼镜:框架眼镜是比较普遍的处理方法,对于一般的近视都可以选择佩戴框架眼

世界上最好的编程语言PHP和Facebook的感情经历

今天讲一段情史,是关于世界上最好的编程语言PHP和Facebook的感情经历。恋爱PHP能和Facebook谈恋爱,主要归功于创始人扎克伯格。小扎这个哈佛的学生,很不安分,鬼点子很多,很喜欢整一些快餐式的Web项目。而PHP的特点就是快速开

PHP、Java、Python、C、C++这几种编程语言都有什么特点或优点?

一、强类型和弱类型语言:C、 C++、 Java 、Python都是强类型的语言。PHP是弱类型的语言。强类型语言是一种强制类型定义的语言,即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就是该数据类型。而弱类型语言是一种弱类型定义

铁打的Python连续3年第一,PHP跌出前十:IEEE编程语言排行榜出炉

乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAIPython势头不减,依旧第一,而且进一步拉开了与其他语言的差距。这一结果,来自IEEE Spectrum2019年度编程语言排行榜。这已经是Python连续3年保持第一。在Pyth

C、C++、Java、JavaScript、PHP、Python分别用来开发什么?

首先,我们先普及一下编程语言的基础知识。用任何编程语言来开发程序,都是为了让计算机干活,比如编写一篇文章,下载一首MP3等,而计算机干活的CPU只认识机器的指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。

最难学的编程语言:Java竟然不是第一名!

编程语言是开发者们代码工作的核心,也是许多开发者最爱讨论的话题。编程语言的选择对开发者和工具制造商都十分重要,前者需要保持最新和具备市场潜力的技能,后者则亟需确保他们能够提供最有用的 SDK。开发者经济分析公司 SlashData 曾发布了

「编程语言」PHP完全自学手册

PHP(外文名 Hypertext Preprocessor,中文名“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。关于PHP详细自学内容:(点击下方“了

《PHP从入门到精通-第3版》免费电子书,值得收藏

一、书籍简介PHP从入门到精通作者: 明日科技出版社: 清华大学出版社出版年: 2012-9-1页数: 540装帧: 平装丛书: 软件开发视频大讲堂二、获取方式转发文本,私信发送:0109,获取下载地址;三、书籍目录第1篇 基 础 知 识第

什么是PHP编程语言?

你是否想了解PHP编程语言的一些知识背景?如果需要请继续往下读。​PHP起源概述PHP是一种通用脚本语言,在后端Web开发中最常用,还可以通过CLI(命令行界面)使用它,有时甚至可以将其打包成可执行文件。1994年,Rasmus Lerdo

友情链接

SEO域名抢注宝宝起名网妈妈知道币圈林肯汽车网ai绘画资讯网羊驼宠物网电动牙刷评测网海康威视股票丽江旅游网承德避暑山庄旅游网防晒霜品牌网宁德新闻资讯网厦门旅游网浴霸品牌网张裕A股张裕葡萄酒免费电影网湖州新闻头条网宠物猫品种网
PHP编程知识网-php开源建站系统、PHP程序员网站开发、php编程工具、php菜鸟教程下载、PHP网络编程教学、php网络编程、php工程师、php菜鸟教程数据库、PHP网站开发、PHP精品源码网站、php程序员入门、php零基础入门教程、php源码搭建网站流程、php从入门到精通第2版、php开发简单网站、php制作网站实例、php网站开发实例教程源代码、php中文网破解版、php中文网。
php编程知识 yoceo.cn ©2022-2028版权所有