浅析数组
来源:互联网 发布:陈宝林最优化答案 编辑:程序博客网 时间:2024/05/29 12:29
数组
int a =10; //定义一个变量并初始化
int b; //定义一个变量未初始化,值为随机值
int arr[10]={1,2,3,4,5,6,7,8,9,10}; //定义一个数组并初始化
int brr[10]; //定义一个数组未初始化,里面的值为随机值
int crr[10]={1,2,3,4}; //数组前四位是1,2,3,4,剩下六位都是0
char drr[]={a,b,c,d,e}; //数组长度可以不写,系统会根据数组里面的内容自动分配长度
注:像数组和结构体都属于聚合类型,聚合类型如果只初始化一部分,那么剩余未初始化的部分值为0。
数组的下标是从0开始的,不是从1开始,这个要特别注意,防止越界。
sizeof:返回一个类型占用的字节数
sizeof(int ) 4
sizeof(double) 8
sizeof(1) 4 //1是整型,占四个字节
sizeof(arr) 40 //arr是一个含有十个整型变量的数组,所以返回的是40
sizeof(drr) 5 //drr是一个有五个字符型变量的数组,所以返回的是 5
那根据sizeof可以求数组长度吗?
当然可以了。40=4*10;5=5*1,数组占用的字节数就是数组的长度和每个变量占的字节数的乘积。所以求数组长度用总的字节数除以每个占的字节就可以了。
不同数组的类型可能不同,char,int ,double...能不能统一表示这些类型呢?
引入数组首元素,首元素也保证数组不会越界,不同数组首元素占用的字节不同,但是能代表每个变量占的字节数。
len:sizeof(arr)/sizeof(arr[0])
注意:只能在定义数组的同一个函数中求sizeof,一般是在主函数中使用,传参的时候使用。
逆序输出数组的值
怎么样逆置一个数组呢?只需要将第一个值和最后一个值交换,第二个和倒数第二个交换,直到交换到一半的时候,就完成了逆置。
{
for(int i=0;i<len/2;i++) //交换一半就够了,如果小于的是长度,就交换了两次,数组不会发生改变
{
int tmp=arr[i];
arr[i]=arr[len-1-i]; //注意数组下标是从0开始,记得减一,否则就会越界。
arr[len-1-i]=tmp;
}
}
{
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
}
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
Reverse(arr,len);
Show(arr,len);
return 0;
}
形参和实参类型要一致,整型数组一定要传长度
数组名表示整个数组,只有两种情况:
1.在定义数组的同一个函数中&arr+1,加的是整个数组的大小
2.在定义数组的同一个函数中求sizeof
其它情况,数组名表示数组首元素的地址。
扩展知识:
c的标准规定,如果定义一个变量不初始化,值为随机值,数组也是一样,没有初始化都是随机值,但是我们实际应用会发现并不是一个随机值,而是-858993460,十六进制是0Xcccccccc,每次都是这个值,不是规定应该是一个随机值吗,为什么不随机了?
标准规定确实是这样,但是如果我们用微软的编译器,比如vs,它就是上面那个值,这是微软故意设的标记,如果未初始化,就是这个值,如果想使用这个未初始化的值,程序会崩溃,在这里崩溃防止以后犯更大的错误,但是gcc并没有这样设置,里面就是一个随机值,也不会崩溃。
定义数组的时候可以用变量吗?
定义数组可以用常量,对于变量,不同的编译器规定的不同。C99已经允许可以用变量定义数组,所以在gcc里面可以用变量定义数组,但是微软的编译器不支持用变量定义数组。如果用微软的编译器,就不能用变量定义数组。
- 浅析 数组
- 数组浅析
- 浅析数组
- excelvba数组入门浅析
- Java数组浅析
- 浅析树状数组
- 浅析二维数组
- $_REQUEST数组浅析
- C#交错数组浅析
- Java数组浅析
- 树状数组(浅析)
- Java数组浅析
- 滚动数组浅析
- swift:数组(Array) 浅析
- PHP 数组浅析
- SparseArray稀疏数组浅析
- 转载PHP数组浅析
- 浅析树状数组
- poj1068 Parencodings【模拟】【刷题计划】
- linux实验三
- centos6.8 yum安装mysql 5.6
- stringstream和istringstream和ostringstream
- JAVA课程6 用接口编写动物模拟器
- 浅析数组
- python查看模块,对象的函数
- A+B for Input-Output Practice (II)
- Mysql5.7解压缩版本在windows下的安装
- 11.17继续调opencv
- java接口----小白入门笔记
- lintcode&九章算法——Google 面试题 | 多余的连接 ? 待解决
- Maven的生命周期(Lyfecycle)的简单介绍
- 祖鲁法则.mobi下载