数组

数组: 内存中连续存储多个元素的结构

 声明一个数组时,编译器为数组分配内存存储空间,数组占据的内存空间是连续的,我们可以计算数组占据的内存大小和

每个元素对应的内存受地址。使用数组处理大量同类型数据

对一个大小为N,类型为short的数组,其占据的内存大小为:

N*sizeof(short)=N*2

如果说第一个元素在内存中的地址为P,那么第M个元素在内存的地址可表示为:P+(M-1)*sizeof(short)

#include<stdio.h>
#include<stdlib.h>

void main()
{
    int a[10];数组越界不报错
    //因为数组外部的内存空间,不确定是否有权限
    //如果越界访问,程序会崩溃 
    for(int i=0;i<10;i++)
    {
        a[i]=i+1;
    }
}


int main1()
{
    int a[5]={1,2,3,4,5};//int指定每个元素的大小 
    //数组在内存中是连续排列 
//    printf("%x,a");
    printf("%d",sizeof(a));//求内存占多少
    printf("\n%d",sizeof(a)/sizeof(int));//求数组多少元素 
    printf("\n%x,a");
    for(int i=0;i<5;i++)
    {
        printf("\na[%d]=%d &a[%d]=%x",i,a[i],&a[i]);//数组中每个元素的大小 
     } 
    
    system("pause");
    
}
 

数组类型:一维数组,二维数组、三维数组

一维数组也称向量, 用以组织具有一维顺序关系的一组同类型数据,在使用数组前,必须先声明数组,编译器根据声明语句为其分配内存,这样数组才有意义。

要在内存中开辟一块连续内存给数组用,需要考虑以下问题,一是在哪里开辟,二是开辟多大的地方,C语言中,这都是由编译器自动完成的,编程人员需要定义数组,即所开辟的数组应能盛放多少元素,每个元素是什么类型,另外,编程人员还要指定数组名。

一维数组声明的基本格式为:

类型 数组名【数组元素个数】

比如 double sz[6];告诉编译器3条信息,数组名是sz,存放的元素是double型,数组存放的元素个数为6,这样,便可以对数组及数组元素进行读写访问。
注意:必须防止下表越界的错误发生,对上面声明的数组sz来说,有效的下标是0到5,在程序中如果出现了sz[6],编程器有时并不会报错,但这可能引起程序电费崩溃。

存在潜在的安全隐患:没有对数组元素初始化,因为立即采用键盘输入为数组元素赋了值,好像问题不大,但如果需要对代码修改,不小心在赋值前便使用了数组元素,这时初始化内存单元内容的不确定,程序输出的结果往往是不可预料的。

不仅仅是数组,在声明创建一个变量后马上对其初始化是个良好的习惯,能有效减少各种意想不到的错误。

#include<stdio.h>
#include<stdlib.h>
#define  N 20
int main()
{
    int a[N];  //只有define可以
//    printf("%d",&N); //编译器放在常量区,没有地址,无从修改 
    // 
    const int num = 10;//可变的常量 ,可以强制去掉常量的属性
    //num = 12;    const限定代码不能修改,在内存有实体,是可变的数 
    printf("%x",&num); 
    //int b[num];//这样不可以 
    
    
    system("pause"); 
     
}

数组初始化

一维数组的初始化形式一般为:类型 数组名[宽度]=[初值列表];如:int a[10]=[10,9,8,7,6,5,4,3,2,1];

括号中可以省略数组宽度。此时编译器通过给出的数据个数来定义数组的宽度;

如:int a[]={10,9,8,7,6,5,4,3,2,1};等价于int a[10] ={10,9,8,7,6,5,4,3,2,1}

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

int b[10]={1,2,3,4}

上面两者并不等价,第一个内存为16个字节,第二个为40个字节,后面的元素初始化为0.

double num[]={};//无法指定数组的大小,无法分配内存

double num[10]={0};//num的数值全部为0

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值