数组的基本概念

数组就是一个可以一次性定义多个相同类型的变量,并可以放到一个连续的内存中去。

初始化

只有在定义的时候顺便赋值才叫初始化。

int a = 1024 ; int arr[5] = {1,2,3,4,5}; // 完全初始化

int arr1[] = {1,2,3,4,5,6,7,8,9,10} // 正确,定义的时候并没有确定大小, 初始化后才确定的大小

arr2 = {1,2,3,4,5,}// 不可行, 数组只有在初始化的时候可以统一赋值

int arr2 [5] = {1,2,3,4,5,6,7}; // 语法上可以,但是逻辑上不允许, 涉嫌越界

int arr3[50] = {1,2,3,4,5}; // 不完全初始化 , 没有初始化部分自动填充0

数组名字的含义

数组名在不同的环境中表示的意思不一样

表示整个数组

a.在定义的时候 int a[10];

b.在sizeof(a)语句中;

c.在取地址&a时。

表示数组首元素的首地址

a.除了上面三种情况以外,其他所有情况都表示首元素的首地址。

数组元素引用

存储方式:一片连续的内存空间,按照具体的数据类型进行分割

数组下标:以数组首地址为起点的偏移量

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

printf("arr1[1]:%pn", &arr1[1]);

printf("arr1[2]:%pn", &arr1[2]);

printf("arr1[3]:%pn", &arr1[3]);

printf("arr1[4]:%pn", &arr1[4]);

printf("arr1[5]:%pn", &arr1[5]);

//输出结果,可得相邻的数组元素地址相差4,与数组的类型所占的大小相等

arr1[1]:0x7fffeec8c1f4

arr1[2]:0x7fffeec8c1f8

arr1[3]:0x7fffeec8c1fc

arr1[4]:0x7fffeec8c200

arr1[5]:0x7fffeec8c204

注意:

1.一位数组中arr表示首元素的起始地址,&arr表示整个数组的起始地址,虽然值是一样的但是代表的意义却不一样;

2.arr+1与arr[1],arr+2与arr[2].....arr+n与arr[n]是相同的意思;

3.a[1]与1[a],a[2]与2[a]....a[n]与n[a]是相同的意思。

字符数组、字符串数组

专门用来存放字符数据的数组,成为字符数组。

char s1 [5] = {'a' ,'b' , 'c' ,'d' , 'e'}; // 中存放的是字符数据

char s2 [6] = {'a' ,'b' , 'c' ,'d' , 'e' , ' '}; // 中存放的是字符串数据

char s3 [6] = {"hello"} ; // s3中存放的是字符串 , 注意数组大小必须能完整存储下整个字符串包括结束符

char s4 [6] = "hello"; // 使用双引号的时候大括号可以省略

s4[1] = 'E' ;

printf("s1:%sn" , s1 );  // 注意该数组为字符数组,不应该使用%s来访问输出,他会涉嫌越界,%s需要遇到' '才愿意停下来

printf("s2:%sn" , s2 );  // 常规操作 printf("s2:%sn" , s2+2 );   s2+2 加了两个 char 的大小 ,

printf("s3:%sn" , s3 );

printf("s4:%sn" , s4 );

多维数组

二维数组可以理解为:数组内容为数组。

/* 测试代码 */

int arr[3][3] = {{1, 11, 111} ,

{2, 22, 222} ,

{3, 33, 333}};

printf("&arr: %pn", &arr);

printf("&arr+1:%pn", &arr+1);

printf("arr[0][0]:%pn", *arr+0);

printf("arr[0][1]:%pn", *arr+1);

printf("arr[0][2]:%pn", *arr+2);

printf("arr[0][0]:%pn", *(arr+0));

printf("arr[1][0]:%pn", *(arr+1));

printf("arr[2][0]:%pn", *(arr+2));

printf("arr[0][1]:%dn", *(*(arr+0)+0));

printf("arr[0][2]:%dn", *(*(arr+0)+1));

printf("arr[0][3]:%dn", *(*(arr+0)+2));

注意:

1.如果将代码中的&arr,arr+0,(arr+0)传递给相应的指针,其所代表的意义也将传递给指针。

零长数组

长度为零的数组

int a[0];

其主要的功能是放在结构体的末尾,作为结构的最后一个成员,可以作为结构体内存扩容入口,数组是C语言中唯一一个允许越界访问的东西。

越界访问:只是访问本来不属于某个变量的内存(数组原本申请大区域)不一定就是非法访问

越界是访问的内存只要都属于我当前程序所用的内存就不属于非法访问。

非法访问:访问的内存地址不属于你这个程序的内存。

变长数组

概念: 在定义数组之前可能他的长度是未知的, 定义语句执行后他的长度是固定的。

重点: 在定于语句中数组的长度是一个变量,定义结束之后即使长度的变量有所变化也不会影响数组的长度了。

说白了就是数组的长度是一个变量;

int i = 90 ; 。。。 。。 int buf[ i ] ;

int a = 10 ; int arr[ a ] = {0} ;  //  error: variable-sized object may not be initialized

注意:

变长数组不可以初始化。

指针数组

用来存放指针的数组

int * arr[5] ;

int a , b ,c ,d, e ;

arr[0] = &a ;

arr[1] = &b ;

char * str [3] = {"Hello" , "GZ2075" , "eVEN"};

for (int i = 0; i

{

printf("str[%d]:%sn" , i , str[i]);

}

字符串常量

常量:不可以被修改的量

存储在常量区的字符串数据称为字符串常量,实际上是一个匿名数组

printf("%dn" , sizeof("GZ2075")); // "GZ2075"表示的整个数组

printf("%pn" , &"GZ2075"); // "GZ2075"表示的整个数组

printf("%cn" ,"GZ2075"[1]); // 使用与数组类似的方法来访问某一位元素

char * p1 = "GZ2075" ; // p1指向 "GZ2075" 匿名数组的首元素的首地址

char * p2 = "GZ2075" + 1; // p2 指向 "GZ2075" 匿名数组的第二个元素 ‘Z’

注意:

字符串常量都是以' '结尾的,不可忽略它的存在。

内容来源于网络如有侵权请私信删除

c语言中数组int*,C语言数组相关推荐

  1. c语言中二维数组怎么,c语言中什么是二维数组

    c语言中什么是二维数组 二维数组A[m][n],这是一个m行,n列的二维数组.以下是由应届毕业生小编整理关于c语言二维数组的内容,希望对大家有所帮助!更多相关内容请关注应届毕业生考试 网. c语言的二 ...

  2. c语言中字符串数组应用,C语言中字符变量字符串和字符数组应用.doc

    C语言中字符变量字符串和字符数组应用 字符变量(type`char`?字符串(string)和字符数组(type`char`arrary)是C语言中非常重要的结构成分,也是应用编程中常发生混淆?导致错 ...

  3. C语言错误c2063,请教C语言中关于将二维数组复制到一个三维数组的问题

    请教C语言中关于将二维数组复制到一个三维数组的问题 小白正在填写一段代码,是有点类似与俄罗斯方块的一段游戏代码,代码如下 要求在增加参数,变量和函数的情况下完成此代码,只能填写// write app ...

  4. 奇怪的方式c语言,C语言中奇怪的C语言特性

    3)Duff's Device http://en.wikipedia.org/wiki/Duff%27s_device 特点是switch与while交错出现.代码类似 4)同名同姓现象 在< ...

  5. 【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析

    之前有一篇文章是学习了字符和字符串的,可以与之结合学习:[C语言进阶深度学习记录]十二 C语言中的:字符和字符串 文章目录 1 字符串的概念 1.1 字符串与字符数组 1.2 字符数组与字符串代码分析 ...

  6. c语言中通过键盘给一维数组赋值怎么_编程C语言进阶篇——构造类型:数组

    在c语言的实际应用中,我们常常需要同时对多个数据进行处理,如果没有专门批量处理数据的方法,就会给我们的程序编写造成巨大的影响.而这种批量处理数据的方法就是我们这次的主题--数组. 一.数组是什么 在c ...

  7. 二维数组在c语言中的作用,C语言中的二维数组

    1.二维数组的定义和引用 一. 数据类型 数组名[常量表达式1][常量表达式2]; (1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1 (2)列下标的取值范围0~m-1 (3) ...

  8. 一万字详解C语言中长度为零的数组

    点击蓝字 关注我们 零长度数组概念: 众所周知, GNU/GCC 在标准的 C/C++ 基础上做了有实用性的扩展, 零长度数组(Arrays of Length Zero) 就是其中一个知名的扩展. ...

  9. c语言中定义字母二维数组,C语言 | 数组

    原标题:C语言 | 数组 1. 一维数组的定义和使用通过对前面知识的学习,我们已经知道如何定义和使用一个一个的各种变量,但总有不够用的时候.举个例子,我要记录一个班32个同学C语言这科的成绩,难道要定 ...

  10. c语言中定义字母二维数组,C语言中二维字符数组

    C语言中二维字符数组的定义和初始化 一般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它.比如说: Code: 1.char testcase[30][MAX_LENG ...

最新文章

  1. 使用XMLSpyDocEditPlugIn2.dll,页面加载失败
  2. 又有两所一流高校加入“不返校”阵营,非毕业年级学生,开学时间待定!
  3. python搜索列表内_使用Python在另一个List中搜索列表的值
  4. mybatis是什么_为什么SpringMVC可以正确解析方法参数名称,但MyBatis却不行?
  5. 使用rsync和scp远程同步文件
  6. 数据库视频(二)——增删改查
  7. One2One主键关联的实现
  8. asp.net button创建控件时出错_Tkinter Radiobutton控件
  9. js检测是否安装java_js判断当前浏览器是否是源生app的webview
  10. c语言上机实验作业答案,第十二次C语言上机实验参考答案
  11. 2952 细胞分裂 2
  12. 网络工程制图论文计算机,计算机工程制图教学的课业评价的论文
  13. 小程序Vant组件库的使用
  14. C#方法名前的方括号作用
  15. bat 链接mysql数据库_使用bat脚本进行数据库操作
  16. 数据脱敏 Data Masking
  17. 【PCB】Altium Designer PCB规则配置
  18. 唤醒计算机教案,智慧课堂教学软件常态化丨镇江中山路实验小学用 智慧“唤醒”课堂...
  19. WebGL 及其在 WebRTC 中的应用
  20. 马斯克:需要300T电池

热门文章

  1. linux使用anaconda安装python包
  2. PDF打开不能打印什么原因呢
  3. termux使用教程python-Termux 入门教程:架设手机 Server 下载文件
  4. gmsk的matlab仿真,MSKGMSK 导师传给我的关于MSK和GMSK的一些相关MATLAB仿真源码 - 下载 - 搜珍网...
  5. v-distpicker的使用
  6. 软件项目开发计划编制过程
  7. 【OS】Linux下 /dev 常见特殊设备介绍与应用[loop]
  8. Qt入门教程【高级控件篇】QTreeView树形视图
  9. 自动化 夏令营 保研
  10. VS201X更换平台Rebuild项目时,旧平台生成的发布件被删除