数组

字符数

1.char ch[10]={"yhping"}; / /字符数组

ch[10],指定了这个char数组的长度是10

[y][h][p][i][n][g][\0][\0][\0][\0]

2.char ch2[10]={‘y’,'h','p','i','n','g'};


区别于char ch2[]={‘y’,'h','p','i','n','g'};


3.char *str="yhping"; / /字符型指针变量

对于字符数组,是将字符串放到为数组分配的存储空间去,而对于字符型指针变量,是先将字符串存放到内存,然后将存放字符串的内存起始地址送到指针变量str中。

整型数组

enum{M=10}

#define N 10

void main()

{

int ar[10]={1,2,3,4,5};/后面全补‘0’

定义:[ ]里必须存放 常量,整型,正整数,定义局部数组和全局数组时必须有值(在编译时能被确定的值)

int br[    ]={1,2,3,4,5}

const int n=10;

int cr[n];//编译通过

            cr[N];//编译通过

            cr[M];//编译通过

}



初始化:ar[5]={ };==>全为0

             ={1,2,3,4,5,}
             ={1,2,3,};==>1 2 3 0 0 括号中最后一个',’可有可无
             ={ , , ,1,2}==>错误

对于数组(在C14标准下)

int ar[-4];        //错误

br[14/3];    //正确

br[14/3.0]; //错误

br[  ]={ };  //错误

br[0]={9};  //错误


int ar[]={1,2,3,4,5,6,7,8,9,10};
sizeof(ar);//40

sizeof(ar[0])=4

sizeof(ar)/sizeof(ar[0])=数组元素个数
在sizeof 中ar代表整个数组,

所以 int *p=ar;//正确

        int *p=&ar[0]//正确


void main()

{
int ar[]={12,23,34,45,56,67,78,89,90,100};
const int n=sizeof(ar)/sizeof(ar[0]);//const 定义的值必须初始化,而sizeof()在编译时就计算,n在编译时就产生确定的                                                       //值,所以编译通过。
}


数组名的例外:
1.sizeof(ar);//在sizeof中ar代表整个数组的大小==>40

2.int *p[10]   ----指针数组
   数组,开辟10个空间,整型,存放整型变量的地址,也就是整型指针 
  sizeof(p)==40
             
  int (*s)[10] ----数组指针
   先看括号,是指针,指向一个数组,数组开辟10个空间,存放10个整型数据     
  sizeof(s)==4
int (*s)[10]=&ar;//数组的地址,代表整个数组
                10不能缺省,也不能为其他数,在编译时检查数组的大小和ar一致

3.int (&br)[10]=ar;//引用数组,数组开辟10个空间(10不可或缺,在编译时检查数组的大小)

其他情况下都代表:首元素地址
int *p=ar;//(和情况2下的s比较,大小相同,意义不同)


区别上述*p和*s

s+1==>指向下一个数组,加40个字节
p+1==>指向下一个数据的地址,加4个字节

int (&br)[10]=ar;

int *p[10] ;

int (*s)[10]; 
sizeof(*s)==>s指向数组,*s代表整个数组==40
sizeof(*p)==>p指向ar[0],*p代表ar[0]本身==4
sizeof(s)==4
sizeof(p)==4
sizeof(br)==40   //br相当于ar的别名,即sizeof(ar)==40



数组正序输出:

for(int i=0;i<n;i++)
{
printtf("%d\n",a[i]);
}


倒序输出:

for(int i=n-1;i>=0;i--)
{
printtf("%d\n",a[i]);
}


for(int i=0;i<n;i++)
{
printf("%d %d %d\n",ar[i],   *(ar+i),   i[ar])
                  =>*(ar+1)  *(ar+i)   *(i+ar)
}

数组在函数形参中退化为指针


数组最大的缺陷:大开小用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值