数组定义,访问,区别表示等问题分析。

    数组的定义:

 初始化:定义数组是即赋值,赋满值。

int arr[10]={1,2,3,4,5,6,7,8,9,10};

半初始化:先将定义的值优先放入数组前面,聚合类型只初始化一部分,剩余部分都为0.

int brr[10]={1,2,3};

未初始化:为随机值,而不是全部填充0。

int crr[10];

数组的访问(有关于数组越界的问题)

先给出一个程序的部分:

int i;

int arr[10];

for(i=0;i<=10;i++)

{

printf("%d\n",i);

arr[i]=0;

}

这个程序存在数组越界的问题,给数组赋值超过了数组的长度,导致程序出现死循环,原因如下:

首先i存放在高地址中,数组依次由高地址往地址存放,i不断自增,赋值给数组每一个元素,当arr[10]时为越界,非法占用了i的内存,使得i的值又变为0,导致死循环(不同的的编程软件先进性不同,有些程序可能会导致崩溃,例如有些程序为了防止越界的发生,将栈间各个变量之间的内存存有两个内存空格。

数组的区别表示:

一维数组名arr在如下情况表示整个数组:

1.在定义数组的同一个函数下,sizeof(arr);

例如:

int arr[10]={1,2,3,4,5,6,7,8,9,10};

sizeof(arr); // 此处可以表示为整个数组,结果为40;

但是如下情况:

void Show(int arr[10])      //实际已经退化成指针

void Show(int *arr,int len)
{
sizeof(arr)/sizeof(arr[0]);   //不能求数组的长度,因为此处的sizeof(arr)表示的是指针,整型指针的长度为4,结果为1

 

2.在定义数组的同一个函数下,取地址+1;&arr+1;

此处的意思表示为地址+整个数组的字节数;

 

数组长度的表示:

 

 

倒置:

void Reverse(int *arr,int len)

 

{
int tmp;
for(int i=0;i<len/2;i++)
{
tmp = arr[i];//arr[i] == *(arr+i)
arr[i] = arr[len-1-i];
arr[len-1-i] = tmp;
}

 

}

主函数中:Reverse(arr,sizeof(arr)/sizeof(arr[0]))   //调用子函数,利用上点中数组名arr表示整个数组的性质,利用运算算出数组的长度传给形参。

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值