码迷,mamicode.com
首页 > 编程语言 > 详细

<15>【掌握】一维数组的存储方式+【掌握】一维数组长度计算方法+【了解】一维数组元素地址+【掌握】一维数组长度计算方法 +【掌握】一维数组的越界问题+【掌握】应用:找最大值

时间:2015-07-07 16:11:50      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

【掌握】一维数组的存储方式

 

 
存储方式:


   1)分配一块连续的存储空间

   2)数组名称代表数组的首地址,从首地址开始,依此存入数组的第一个,第二个...第n个元素

   3)每个元素占用相同的字节数(取决于数组类型)

   4)元素之间的地址说连续。
 

【了解】一维数组元素地址

 

#include <stdio.h>

int main(int argc, const char * argv[]) {
    //定义两个数组
    int x[]={1,2};
    char ca[5]={‘a‘,‘B‘,‘C‘,‘D‘,‘E‘};
    
    //1、数组x和 数组ca他们的地址一定连续吗? 可以不连续的
    //数组名代表了数组的首地址
    //通过打印两个数组的地址,证明:先定义的数组分配在高地址
    printf("x = %p\n",x);    //高
    printf("ca= %p\n",ca);   //低
    
    //2、数组各元素的地址是连续的么?
    //两个元素相差4个字节r
    printf("数组名x=%p\n",x); //观察x的值和 &x[0]的地址是否相同
    printf(" &x[0] = %p\n",&x[0]); //低
    printf(" &x[1] = %p\n",&x[1]); //高
    
    //查看ca数组的每一个元素的地址,观察是否连续
    //ca[0]  低
    //ca[4]  高
    printf("ca = %p\n",ca); //ca是数组名 == &ca[0]
    for (int i=0; i<5; i++) {
        printf("&ca[%d] = %p\n",i,&ca[i]);
    }
    
    //3、数组名代表了数组的首地址 == 数组的第一个元素的地址
    // x == &x[0]
    // ca == &ca[0]
    
    // 数组名是一个常量 存储的就是数组的首地址
    // ca = 1;
    
    
    
    return 0;
}
 
 
x = 0x7fff5fbff720
ca= 0x7fff5fbff70b
数组名x=0x7fff5fbff720
 &x[0] = 0x7fff5fbff720
 &x[1] = 0x7fff5fbff724
ca = 0x7fff5fbff70b
&ca[0] = 0x7fff5fbff70b
&ca[1] = 0x7fff5fbff70c
&ca[2] = 0x7fff5fbff70d
&ca[3] = 0x7fff5fbff70e
&ca[4] = 0x7fff5fbff70f
 

【掌握】一维数组长度计算方法

 

 
#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    //1、数组在内存中占用的字节数
    
    //定义了一个长度为5的数组,每一个都只能存放int类型的数据
    int a[5]={0};  //数组占用的总字节数: 存储5个 * 每个都是sizeof(int)
    int a1[]={1,2,3,4,5,6,7,78};
    
    char ch[3];    // 3 * sizeof(char)
    double d1[10]; // 10 * sizeof(double)
    
    //验证数组占用的总字节数
    //sizeof(数组名)
    //&a[0]   第一个元素的地址
    // a[0]   第一个元素的值
    int len = sizeof(a);  //20
    
    //字符数组ch
    len = sizeof(ch);
    
    //计算double类型数组占用的字节数
    len = sizeof(d1);
    
    
    //2、数组的长度
    //数组的总字节数 / 数组的任何一个元素在内存中占用的字节数
    
    len = sizeof(a)/sizeof(int);
    printf("len = %d\n",len);
    len = sizeof(a1)/sizeof(int);
    printf("len = %d\n",len);
    
    return 0;
}
 
len = 5
len = 8

 

 【掌握】一维数组的越界问题

 
#include <stdio.h>

int main(int argc, const char * argv[]) {
    //定义一个长度为2的数组
    //下标范围 0  1
    char a[2]={‘h‘,‘i‘};
    printf("a[0] = %c\n",a[0]);
    printf("a[1] = %c\n",a[1]);
    
    //数组的越界
    a[2]=‘s‘;
    //这是不安全的,因为这个空间不属于你的
    //即使没有报错,但是这个数有可能丢失      这个好比你在老家建房子占了别人家的地,这块地什么时候被人拿去做其他用处你是没法控制的
    printf("a[2] = %c\n",a[2]);
    return 0;
}
 
a[0] = h
a[1] = i
a[2] = s

【掌握】应用:找最大值

 
#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    //定义数组
    int a[3];
    
    //通过循环依次输入3个数
    for (int i=0; i<3; i++) {
     
    //先给个提示:当前输入的是第多少个
        printf("请输入第%d个数:\n",i+1);
    
    //接收收据,保存到数组中
        scanf("%d",&a[i]);
     }
    
    for (int i=0; i<3; i++) {
        printf("%d\n",a[i]);
    }
    
    //数组的遍历


   //for循环,遍历数组,找出最大值
    //假设最大值是第一个元素
    int max=a[0];  //max存的就是第一个数
    for (int i=1; i<3; i++) {
        //判断a[1]>max  如果大于max,让max重新复制,重新保存最大值
        if(a[i]>max){
            max = a[i];
        printf("%d\n",max);
        }
    }
    
    printf("max = %d\n",max);
  
    return 0;
}
 
 
请输入第1个数:
1
请输入第2个数:
8
请输入第3个数:
6
1
8
6
8
max = 8

 

<15>【掌握】一维数组的存储方式+【掌握】一维数组长度计算方法+【了解】一维数组元素地址+【掌握】一维数组长度计算方法 +【掌握】一维数组的越界问题+【掌握】应用:找最大值

标签:

原文地址:http://www.cnblogs.com/kongweiiwei/p/4627178.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!