标签:
【掌握】一维数组的存储方式
存储方式: 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