C语言中的数组
来源:互联网 发布:企业汉字做域名的品牌 编辑:程序博客网 时间:2024/06/05 20:06
一维数组
一维数组的创建和初始化
int main(){ int arr[5]={0};//创建一个包含有五个元素的整型数组,并将首元素初始化为0 int arr[]={0};//当不确定数组的元素个数时,[]里面可以不用写具体的值}
错误的例子
int main(){ const int n = 10; int arr[n];//这样来创建一个一维数组是错误的,[]里面必须是一个常量 return 0;}
数组创建好之后,数组名代表数组首元素的地址。
数组的越界访问
int main(){ int i=0;//在内存中,由于i先创建,i一定会存放在高地址处 int arr[4]={0};//相对i位于低地址处 for(i=0;i<=6;i++) { arr[i]=0; } return 0;}//由于数组的越界访问,这个程序会无限的循环下去//是因为随着数组下标的增长,会越界访问到i所在的空间,继而不断改变i的值
VS编译器会在i所在内存与arr[4]所在内存间隔两个内存空间(类型与数组一致)。
在Linux环境下,i所在空间与arr[4]所在空间间隔1个内存空间。
在早期的编译器中,i所在空间与arr[4]所在空间是相邻存放的。
一维数组在内存中的存放
调试下面的程序并且查看数组arr的地址
&arr:
&arr[0]:
&arr[1]:
&arr[2]:
&arr[3]:
因为定义的数组类型为整型,所以每个元素之间的地址相隔4,所以一维数组在内存中是相邻存放的。
int arr[] = {0};int i = 0;int *p = arr;*(p+i) = arr[i];//arr[i]=*(arr+i)=*(p+i)=i[arr]
二维数组
二维数组的创建与初始化
int main(){ int arr[3][4]={0};//3表示行数,4表示列数 int arr1[3][4]={1,2,3,4,5};//按顺序存放,第一行存1 2 3 4,5存在第二行 int arr2[3][4]={{1,2,3},{4,5}};//1 2 3存在第一行,4 5存在第二行 int arr3[][常量]={0};//行数可以省略,列数不可以省略 return 0;]
二维数组的数组名表示首行首元素的地址,它表示整个数组的的地址。
二维数组名+[行号]表示二维数组中该行首元素的地址,它表示二维数组中的这一整行。
二维数组名+[行号]+[列号]表示二位数组中该元素的地址,它表示二维数组中的一个元素。
二维数组在内存中的存放
二维数组在内存中是连续存放的。
运行并调试下面的程序
&arr:
&arr[0]:
&arr[1]:
&arr[2]:
可以看出二维数组每行的首元素之间相隔12个字节,整形数组每个元素的大小为4字节,所以容易得到二维数组在内存中是连续存放的。
int main(){ int arr[3][4]={0}; return 0;}
sizeof( )
1.当数组名单独放在sizeof()内时,表示整个数组。
2.&数组名(数组名表示整个数组),取出的是整个数组的地址。
除此之外,所有的数组名都表示数组首元素的地址。
阅读全文
0 0
- C语言中的数组
- C语言中的数组
- C语言中的数组
- C语言中的数组
- c语言中的数组
- C语言中的数组
- C语言中的数组
- C语言中的数组
- C语言中的数组
- 转贴 C语言中的数组
- C语言中的多维数组
- C语言中的数组越界
- C语言中的多维数组
- C语言中的数组排序
- c 语言中的边长数组
- C语言中的数组指针
- C语言中的指针数组
- C语言中的字符数组
- HikariCP、MySQL Configuration 性能优化
- enclipse 常用快捷键
- Mysql索引的使用和性能优化
- UE4 动画重定向之使用同一套骨骼
- Python3.x 多线程
- C语言中的数组
- Diffie–Hellman key exchange DH密钥协商
- 操作系统总结
- Java中的线程池(3)----SingleThreadExecutor
- Java 8 Stream – Read a file line by line
- QT:QMessageBox的简单使用
- 身份证号码验证Util
- 生成带参数的二维码接口实例
- 开源之于VMware的重要性