浅谈数组

来源:互联网 发布:成都家电维修软件 编辑:程序博客网 时间:2024/05/17 02:03

俗话说:”不积跬步,无以至千里。“做什么事都应该一步一个脚印,取得进步,今天我来分享一些数组相关的概念知识:

1.一维数组的创建和初始化 

2.一维数组的使用 
3.一维数组的存储 
4.一维数组的指针访问 
5.二维数组的创建和初始化 
6.二维数组的使用 
7.二维数组的存储 

8.二维数组的指针访问 


1.一维数组的创建和初始化:

1.1创建:

type_t   arr_name  [const-n];

//type_t 是指数组的元素类型

//const_t 是一个常量表达式,用来指定数组的大小

注:数组创建,[ ]中要给一个常量,不能是变量

举例:  int arr1[10];  //可以

     int count = 10;

int arr2[count];  //不可以


1.2 初始化:数组的初始化,是指在创建数组的同时给数组的内容一些合理初始值。

int arr1[10] = {1,2,3,4};

int arr2[] = {1,2,3,4};

int arr3[4] = {1,2,3,4};'

int arr4[3] = {'a',98,'c'.};

char arr5[] = {"abcdef"};  //注意'\0'的存在

char arr6[] = {'a','b','c'};

数组在创建的时候如果不想指定数组的确定的大小就得初始化。


2.一维数组的使用:


1.数组时使用下标来访问,且下标从0开始:

//.......


int arr[10] = {0};

int i = 0;

for(i = 0; i < 10; i++)

{

arr[i] = i;

}


2.数组的大小可以通过计算得到:

int arr[10];

int sz = sizeof(arr)/sizeof(arr[0]);


3.一维数组的存储:在vs2010环境下输入以下代码:

#include <stdio.h>


int main()
{
int arr[10] = {0};
int i = 0;
for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
{
printf("&arr[%d] = %p\n",i,&arr[i]);
}
return 0;
}

运行结果是:


可见:数组在内存中连续存放。


4.一维数组的指针访问:

//...

int arr[10] = {0,1,2,3,4,5,6,7,8,9};

printf("%p\n",arr);

printf("%d\n",*arr);

所以,数组的数组名就是数组首元素的地址。


通过数组名+整数的运算,可以获取到数组的每个元素的地址。

int arr[10] = {0};

int i = 0;

int* p = arr;

for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)

{

*(p+i) = i;  //使用指针来访问数组

}


5.二维数组的创建和初始化

5.1创建

int arr[3][4];

char arr[3][4];

double arr[3][4];

5.2初始化

int arr[3][4] = {1,2,3,4};

int arr[3][4] = {{1,2},{3,4}};

int arr[][4] = {{1,2},{3,4}};


6.二维数组的使用

也通过下标的方式:

//......

int main()
{
int arr[3][4] = {0};
int i = 0;
for(i = 0; i < 3; i++)
{
int j = 0;
for(j = 0; j<4; j++)
{
arr[i][j] = i*4+j;
}
}
for(i = 0; i < 3; i++)
{
int j = 0;
for(j = 0; j<4; j++)
{
printf("%d ",arr[i][j]);
}
}

return 0 ;
}


7.二维数组在内存中的存储:在vs2010环境下运行一下代码:


int main()
{
int arr[3][4] = {0};
int i = 0;
for(i = 0; i < 3; i++)
{
int j = 0;
for(j = 0; j<4; j++)
{
printf("&arr[%d][%d] = %p\n",i,j,&arr[i][j]);
}
}
return 0;
}


运行结果为:

可见:二维数组在内存中也是连续存储。

8.二维数组的指针访问


int main()
{
int arr[3][4] = {0};
int* p = &arr[0][0];
int i = 0;
for(i = 0; i < 3*4; i++)
{
p[i] = i;
}
for(i = 0; i < 3; i++)
{
int j = 0;
for(j = 0; j<4; j++)
{
printf("%d ",arr[i][j]);
}
}
return 0;
}


运行结果为:0到11