数组

来源:互联网 发布:淘宝直播的货源怎么找 编辑:程序博客网 时间:2024/05/22 13:17
数组

一维数组
声明形式:
[存储类型说明符] [类型修饰符] 类型说明符 数组名[常量表达式]={初值表};
存储类型说明符:extern、static 
类型修饰符:const、volatile 易变
类型说明符:  int 、 char 、 …
数组名:是一个标识符,是一个地址常量,用以表示数组中打头元素的地址

int  u[9]={ , 1, ,  ,2};//错误:缺省u[0], u[2]不是最后连续元素

**外部数组和静态数组的元素的缺省初值都是0
局部数组的初值则是随机的 

int a[3]={1,2,3};
    int b[4]={3,2,1,0};
    //a=b;//错误,只能赋值元素,a,b是地址常量
    //a=3;
    printf("%p:%p,%p:%p\n",a,b,&a[0],&b[0]);
0x7fff5fbff7bc:0x7fff5fbff7a0,0x7fff5fbff7bc:0x7fff5fbff7a0
相当于:a=&a[0],b=&b[0]

//地址的特例
#include <stdio.h>

int main()
{
     int a = 0x12345678;
     char *pc = (char *)&a;
     printf("%x:%x:%x:%x\n",pc[0],pc[1],pc[2],pc[3]);
     return 0;
}
//打印结果:78:56:34:12,intel的小端模式

     int a[];//错误
     int a[]={};//特殊的定义格式,正确,随机生成数据
    //int b[][]={{3,2,1},{0,5,6},{1,1,1}};//错误,数组第一个下标不可省略
    //int b[][3]={};//正确
    //int b[3][3]={{3,2,1},{0,5,6},{1,1,1}};//正确
    //int b[3][]={};//错误

数组与指针的联系:
char c[4]={1,2,3,4};
    printf("%d\n",c[0]);//取值
    printf("%d\n",*(c+0));//取值
    printf("%p\n",&c[0]);//取地址
    printf("%p\n",c+0);//取地址 
0 0