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