数组
一:一维数组
1 . 数组的创建
数组顾名思义是含有相同元素的集合,(类似我们高中数学所学习的集合)。
例如
int arr[10];
char arr1[2];
float arr2[3];
double arr3[5];
注意:切记 [ ]这个中要给常量,不能使用变量。
2 .数组的初始化
初始化是指:在数组的创建同时并赋予合理的初始值。
有如下的几种赋值类型:
int arr[10]={1,2,3,4,5,6,7,8];
int arr[ ]={1,2,3,4};
char arr[ ]={'a',23,'b'};
char arr[ ]="abcdef";\\(切记这个数组是有7个元素,a b c d e f \0)
在引号内建立的数组是以\0结束的。
char *p=”abcdef”;将字符串赋值给指针变量,其赋值的是字符串第一位的地址。
3 .一维数组的使用
如果想要表示数组中的某个元素,可以用arr[0],arr[1]表示。其中[ ]李是元素的下标,其表示方法是0~元素个数-1。
代码如下:
#include <stdion.h>
int main()
{
int arr[10]={0};
int i = 0;
for(i=0; i<10; i++)
{
arr[i]=i;\\对数组的赋值
}
for(i=0; i<10; i++)
{
printf("%d ",arr{i});\\打印一个数组
}
return 0;
}
其中为了代码有很好的可移植性我们可以将上诉代码
for(i=0; i<10; i++)
换为
int sz = sizeof(arr)/sizeof(arr[0]);
将10替换成sz,这样这个代码的可移植性大大增强。
4 .一维数组在内存的存储形式
(因为我对这个博客不太熟悉,所以把代码的运行结果不会上传)
#include <stdion.h>
int main()
{
int arr[10]={0};
int i = 0;
for(i=0; i<10; i++)
{
printf("&arr[%d]=%p\n",i,&arr[i]);
}
return 0;
}
在这个代码的运行结果,我们可以看出来,数组在内存的存储方式是连续的。
5.指针访问
#include <stdion.h>
int main()
{
int arr[10]={0};
int i = 0;
for(i=0; i<10; i++)
{
printf("%p\n",arr);
printf("%p\n",*arr);
}
return 0;
}
由上面的的俩组地址可以得到,数组的数组名其实是数组首元素的地址。
二:二维数组
1 .二维数组的创建
int arr[3][4];
char arr[3][5];
double arr[2][4];
2 .二维数组的初始化
int arr[3][4]={1,2,3,4};
char arr[3][5]={{1,2},{3,4}};
double arr[2][4]={{2,3},{4,5}};
3 .二维数组的使用
#include <stdion.h>
int main()
{
int arr[3][5]={0};
int i = 0;
for(i=0; i<3; i++)
{
int j = 0;
for(j=0; j<5; j++)
{
arr[3][5]=i*5+j;
}
}
for(i=0; i<3; i++)
{
for(j=0; j<5; j++)
{
printf("%d ",arr[i][j]);
}
}
return 0;
}
4 .二维数组在内存的存储
#include <stdion.h>
int main()
{
int arr[3][5]={0};
int i = 0;
for(i=0; i<3; i++)
{
int j = 0;
for(j=0; j<5; j++)
{
printf("&arr[%d][%d]=%p\n",i,j,&arr[i][j]);
}
}
return 0;
}
类似一维数组的使用。由结果可知二维数组在内存中也是连续存放的。
以上就是我理解的数组,类似一维,二维。还有三维…等等。
总之,有数组就得学会指针。这将会是非常重要的!!!