数组本质分析

 

  • 数组是相同类型变量的有序集合,例如:int a[5];
  1. a代表数组第一个元素的起始地址
  2. 有5个int类型的数据,且是5个连续的内存空间。
  3. 这个20个字节的空间的名字叫a,a[0],a[1]都是数组中的元素,数组中的元素没有名字
  • 数组的大小
  1. 数组在一片连续的内存空间中存储元素
  2. 数组元素的个数可以显式或隐式指定:int a[5] = {2,3}; int b[] = {1,2};
 1 #include <stdio.h>
 2 int main()
 3 {
 4      int a[5] = {1,2};
 5      int b[] = { 3, 4 };
 6      printf("a[2]=%d\n",a[2]);
 7      printf("a[3]=%d\n",a[3]);
 8      printf("sizeof(a)=%d\n",sizeof(a));
 9      printf("sizeof(b)=%d\n", sizeof(b));
10      printf("数组a的元素个数=%d\n",sizeof(a)/sizeof(a[0]));
11      printf("数组b的元素个数=%d\n", sizeof(b) / sizeof(b[0]));
12      printf("&a=%p\n",&a);
13      printf("&a[0]=%p\n", &a[0]);
14      printf("a=%p\n",a);
15      return 0;
16 }
17 运行结果:
18 a[2]=0
19 a[3]=0
20 sizeof(a)=20
21 sizeof(b)=8
22 数组a的元素个数=5
23 数组b的元素个数=2
24 &a=004FF9F4
25 &a[0]=004FF9F4
26 a=004FF9F4
27 请按任意键继续. . .
  • 数组地址与数组名
  1. 数组名代表数组首元素的地址
  2. 数组的地址需要用取地址符&才能得到
  3. 数组首元素的地址和数组的地址相同
  4. 数组首元素的地址和数组的地址是两个不同的概念
  • 数组名的盲点
  1. 数组名可以看做一个常量指针
  2. 数组名“指向”的是内存中数组首元素的起始地址
  3. 数组名不包含数组的长度信息
  4. 在表达式中,数组名只能作为常量使用
  5. 只有在下列场合中数组名不能看做常量指针:数组名作为sizeof操作符的参数,数组名作为&运算符的参数
 1 #include <stdio.h>
 2 int main()
 3 {
 4      int a[5] = { 0 };
 5      int b[2];
 6      int *p = NULL;
 7      p = a;
 8      printf("a=%p\n",a);
 9      printf("p=%p\n",p);
10      printf("&p=%p\n",&p);
11      printf("sizeof(a)=%d\n",sizeof(a));
12      printf("sizeof(p)=%d\n", sizeof(p));
13      return 0;
14 }
15 运行结果:
16 a=004FFBD4
17 p=004FFBD4
18 &p=004FFBB8
19 sizeof(a)=20
20 sizeof(p)=4
21 请按任意键继续. . .

原文地址:https://www.cnblogs.com/chengeputongren/p/12176144.html

时间: 2024-10-12 15:23:05

数组本质分析的相关文章

娓娓道来c指针 (5)c数组本质

(5)c数组本质 c中的数组是一种聚合类型,把同种类型的元素按顺序存储,即是数组.c中数组类型的特点在于:它是嵌套定义的. 看下一个二维数组int array[2][3]={{1,2,3},{4,5,6}};的内存存储形式: c中的数组是嵌套定义的:二维数组的元素是一维数组,三维数组的元素是二维数组-- 像array[2][3]这样的二维数组,是由两个一维数组组成的:array[0].array[1],这两个一维数组的规模都是array的第二个下标3.同时,array[0].array[1]就是

第51课 继承对象模型分析——多态的本质分析

多态的本质分析 用C写面向对象,用C实现多态 #ifndef _51_2_H_ #define _51_2_H_ typedef void Demo; typedef void Derived; Demo* Demo_Create(int i, int j); int Demo_GetI(Demo* pThis); int Demo_GetJ(Demo* pThis); int Demo_Add(Demo* pThis, int value); void Demo_Free(Demo* pThi

第27课 数组的本质分析

1. 数组的概念 (1)数组是相同类型的变量的有序集合 (2)数组在一片连续的内存空间中存储元素 (3)数组元素的个数可以显示或隐式指定 [编程实验]数组的初始化 #include <stdio.h> int main(){ //数组初始化 int a[5] = {1, 2};//第1.2个元素分别为1.2,其余为0 int b[] = {1, 2};//编译过程中,编译会为计算数组b的大小 int i=0; for (i = 0;i < 4;i++) { printf("a[

数组的本质分析

数组是相同类型的变量的有序集合 数组在一片连续的内存空间中存储元素 数组元素的个数可以显示或隐式指定 int a[5] = {1,2}; int b[] = {1,2}; 数组名代表数组首元素的地址 数组的地址需要取地址符&才能得到 数组首元素的地址与数组的地址值相同 数组首元素的地址与数组的地址是两个不同的概念 数组名可以看作一个常量指针 数组名"指向"的是内存中数组首元素的起始位置 数组名不包含数组的长度信息 在表达式中数组名只能作为右值使用 只有在下列场合中数组名不能看做

C++语言中数组指针和指针数组彻底分析

#################################                              ##       基本知识               ##                              ################################# 当然我们一切都是从最简单的内建类型开始,最后我会做一些推广.先看一下基本的形式,我们从这里起步! Cpp代码 --------------指针---------------- int a

关于JS中数组的分析操作

JS数组的基础操作代码: <script type="text/javascript">        数组的三种定义    var arr1 = new Array();     var arr3 = Array(1,2,3.5,4,'5',false);     var arr2 = [1,2,3,4,'5',"aa",true];         var i;     var arr4 = [];    arr4[3] = 12;     arr4

C++中引用的本质分析

引用的意义 引用作为变量别名而存在,因此在一些场合可以代替指针 引用相对于指针来说具有更好的可读性和实用性 swap函数的实现对比: void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } void swap_yinyong(int& a,int& b) { int t = a; a = b; b = t; } int main() { int a = 1; int b = 2; printf("a = %d,b =

8.2.2 本质分析

1 .Equals  静态方法  Equals 静态方法实现了对两个对象的相等性判别,其在 System.Object 类型中实现过程可以表 示为: public static bool Equals(object objA, object objB) { if (objA == objB) { return true; } if ((objA != null) && (objB != null)) { return objA.Equals(objB); } return false; }

应聘条件本质分析

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 专栏申请有一段时间了,不过一直没有想好,如何去写相应的内容. 想法源于之前招聘的过程中,很多开发人员总有这样或那样的局限,尤其是,对于初级要求,往