浅析数组

来源:互联网 发布:陈宝林最优化答案 编辑:程序博客网 时间: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,一般是在主函数中使用,传参的时候使用。


逆序输出数组的值

怎么样逆置一个数组呢?只需要将第一个值和最后一个值交换,第二个和倒数第二个交换,直到交换到一半的时候,就完成了逆置。

#include<stdio.h>
void Reverse(int *arr,int len)  //数组逆置函数
{
 for(int i=0;i<len/2;i++)  //交换一半就够了,如果小于的是长度,就交换了两次,数组不会发生改变
 {
  int tmp=arr[i];
  arr[i]=arr[len-1-i];  //注意数组下标是从0开始,记得减一,否则就会越界。
  arr[len-1-i]=tmp;
 }
}
void Show(int *arr,int len)  //顺序打印函数
{
 for(int i=0;i<len;i++)
 {
  printf("%d ",arr[i]);
 }
}
int main()
{
 int arr[10]={1,2,3,4,5,6,7,8,9,10};
 int len = sizeof(arr)/sizeof(arr[0]);
 Reverse(arr,len); 
 Show(arr,len);
    return 0;
}

形参和实参类型要一致,整型数组一定要传长度



数组名表示整个数组,只有两种情况:

1.在定义数组的同一个函数中&arr+1,加的是整个数组的大小

2.在定义数组的同一个函数中求sizeof

其它情况,数组名表示数组首元素的地址。



扩展知识:

       c的标准规定,如果定义一个变量不初始化,值为随机值,数组也是一样,没有初始化都是随机值,但是我们实际应用会发现并不是一个随机值,而是-858993460,十六进制是0Xcccccccc,每次都是这个值,不是规定应该是一个随机值吗,为什么不随机了?

       标准规定确实是这样,但是如果我们用微软的编译器,比如vs,它就是上面那个值,这是微软故意设的标记,如果未初始化,就是这个值,如果想使用这个未初始化的值,程序会崩溃,在这里崩溃防止以后犯更大的错误,但是gcc并没有这样设置,里面就是一个随机值,也不会崩溃。

       定义数组的时候可以用变量吗?

       定义数组可以用常量,对于变量,不同的编译器规定的不同。C99已经允许可以用变量定义数组,所以在gcc里面可以用变量定义数组,但是微软的编译器不支持用变量定义数组。如果用微软的编译器,就不能用变量定义数组。



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 埋在墙里的水管漏水怎么办 开发商暗埋水管热熔接头漏水怎么办 钻墙把水管钻破了怎么办 钻墙时不小心把水管钻破了怎么办 孩子把同桌的铅笔盒弄坏了怎么办 水管伐坏了物业不给修怎么办 卫生间埋在地下的水管漏水怎么办 埋在地下的水管冻住了怎么办 洗脸盆下水管有眉笔掉堵了怎么办 楼上打空调眼导致墙面潮湿怎么办 阳台做防水了又贴砖还漏水怎么办 洗菜盆里的盖子吸住拔不起来怎么办 掉小区阴井盖里物业不管怎么办 卫生间下水道被头发堵了怎么办妙招 久量时尚夜光台灯不亮了怎么办 我想做水电暖工程没有资质怎么办 修手机被弄丢了没有开维修单怎么办 手机去维修被老板弄丢了怎么办 5年保修期过后房子楼顶漏水怎么办 墙内水管漏水怎么办3步骤巧维修 下面有地暖下面水管漏水怎么办 热水器接的塑料水管子漏水怎么办 电热水器烧热水时热水管漏水怎么办 户户通位置锁定模块异常1怎么办 户户通位置锁定模块异常3怎么办 逆战安全系统检测客户端异常怎么办 电视户户通位置信息模块异常怎么办 苹果手机wi-fi模块坏了怎么办 xp本地连接受限制或无连接怎么办 公司没帮二级建造师延续注册怎么办 考造价师考过了年限不够怎么办? 上海众非称重不显示数字怎么办 宝骏630防火墙隔热棉掉了怎么办 冷车启动水温报警灯亮了怎么办 租铺位面积比合同面积小怎么办 农村村民建房领居不肯签名怎么办 车祸死者家属不来协商赔偿怎么办 26岁想回去当老师了怎么办 面包车排量小空调带不凉快怎么办 科三包过不给退钱人跑了怎么办 护师职称考试成绩单丢了怎么办