[C语言]菜鸟的一些理解-数组1
本帖最后由 u011741688 于 2013-08-28 23:18:04 编辑 数组的概念:数组的同一数据类型的许多数据元素按某种顺序排列在一起的集合,简单的来说 就是同一数据类型的集合。
为何需要数组:
假如我们要定义10个int型 int i,j,k,x,y,z,.... 这样不是很麻烦,也不好管理。
一维数组:
一维数组是C语言中用来储存和处理一维序列数据的数据类型。组合使用数组名 和 数组下标[] 可以方便的访问数组的任意元素。
数组的定义: 数据类型 数组名[数组容量];
例1:
int array[5];//定义一个可以储存5个int型数据类型的数组
char c[2];//定义一个可以储存2个char型数据类型的数组
定义数值的需注意:数组容量必须是常量,这样编译器才可以成功为其分配内存。
数组的赋值:
1.int array[5] = {1,2,3,4,5};//其值要用逗号分开。
2.int array[5];//单独为其赋值。
array[0] = 1;
array[1] = 2;
.............
array[4] = 5;
3.int array[] = {1,2,3};//不为其定义数组容量,但是编译器会根据其元素的个数作为数组容量,当前有3个元素,那么该数组的容量是3。
4.int array[5] = {1,2,3};//只为数组的一部分赋值,剩余的编译器会初始化为零。
数组的访问:
通过下标访问数组中任意元素。
#include <stdio.h>
int main(void)
{
int array[5] = {1,2,3,4,5};
int i = 0;
for(i = 0;i < 5;++i)
printf("%d\t",array[i]);
printf("\n");
return 0;
}
#include<stdio.h>
int main(void)
{
int array[10] = {1,3,5,6,7,34,67,22,56,76};
int i = 0;
double m = 0;;
for(i = 0;i < 10;++i)
m = m + array[i];
m = m / 10.0;
printf("m = %lf\n",m);
return 0;
}
#include <stdio.h>
int main(void)
{
int array[20] = {1,1};
int i = 0,f = 0;
for(i = 2;i < 20;++i)
array[i] = array[i-1] + array[i-2];
for(i = 0;i < 20;++i)
printf("%d\t",array[i]);
printf("\n");
return 0;
}
#include <stdio.h>
int main(void)
{
int x = 0,i = 0;
int array[10] = {2,5,1,7,0,10,6,8,90,30};
for(i = 0;i < 10;++i)
printf("%d\t",array[i]);
printf("\n请输入你要查找的数:");
scanf("%d",&x);
for(i = 0;i < 10;++i)
{
if(x == array[i])
break;
}
if(i == 10)
printf("没有该数!!\n");
else
printf("查找成功!该数在第%d位!\n",i+1);
return 0;
}
#include <stdio.h>
int main(void)
{
int i = 0,j = 0,t = 0;
int array[10] = {0};
for(i = 0;i < 10;++i)
{
printf("请输入[%d]:",i);
scanf("%d",&array[i]);
}
for(i = 0;i < 10;++i)
{
for(j = i + 1;j < 10;++j)
if(array[i] > array[j])
{
t = array[i];
array[i] = array[j];
array[j] = t;
}
}
for(i = 0;i < 10;++i)
printf("%d\t",array[i]);
printf("\n");
return 0;
}
#include <stdio.h>
int main(void)
{
int i = 0;
int array[5] = {1,2,3,4,5};
for(i = 0;i < 5;++i)
printf("%d\t",array[i]);
printf("\n");
/****************************
越界访问
****************************/
for(i = 0;i < 7;++i)
printf("%d\t",array[i]);//会输出两个垃圾数字,
printf("\n");
return 0;
}
访问越界是垃圾值,但是当你越界已经破坏了程序底层的栈空间的话
就会出内存空间访问出错了!
其实可以把指针也可以和数组一起讲讲!
马上看指针了,好好理解下指针,c语言的比较重要的一部分了
提示点:指针是指针,数组是数组,没有多大的关系!
//在堆中开辟一个2×3×4×5的4维int数组
#include <stdio.h>
#include <malloc.h>
int ****p;
int h,i,j,k;
void main() {
p=(int ****)malloc(2*sizeof(int ***));
if (NULL==p) return;
for (h=0;h<2;h++) {
p[h]=(int ***)malloc(3*sizeof(int **));
if (NULL==p[h]) return;
for (i=0;i<3;i++) {
p[h][i]=(int **)malloc(4*sizeof(int *));
if (NULL==p[h][i]) return;
for (j=0;j<4;j++) {
p[h][i][j]=(int *)malloc(5*sizeof(int));
if (NULL==p[h][i][j]) return;
}
}
}
for (h=0;h<2;h++) {
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
for (k=0;k<5;k++) {
p[h][i][j][k]=h*60+i*20+j*5+k;
}
}
}
}
for (h=0;h<2;h++) {
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
for (k=0;k<5;k++) {
printf(" %3d",p[h][i][j][k]);
}
printf("\n");
}
printf("--------------------\n");
}
printf("=======================\n");
}
for (h=0;h<2;h++) {
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
free(p[h][i][j]);
}
free(p[h][i]);
}
free(p[h]);
}
free(p);
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19
//--------------------
// 20 21 22 23 24
// 25 26 27 28 29
// 30 31 32 33 34
// 35 36 37 38 39
//--------------------
// 40 41 42 43 44
// 45 46 47 48 49
// 50 51 52 53 54
// 55 56 57 58 59
//--------------------
//=======================
// 60 61 62 63 64
// 65 66 67 68 69
// 70 71 72 73 74
// 75 76 77 78 79
//--------------------
// 80 81 82 83 84
// 85 86 87 88 89
// 90 91 92 93 94
// 95 96 97 98 99
//--------------------
// 100 101 102 103 104
// 105 106 107 108 109
// 110 111 112 113 114
// 115 116 117 118 119
//--------------------
//=======================
//