数组

数组:是一组相同类型元素的集合。

一维数组

1.数组的创建方式:

type_t   arr_name   [const_n];//type_t 指数组的元素类型

                                                 //[const_n] 是一个常量表达式,用来指定数组大小

如:int arr1[10];

       char arr3[1]; //这两个都可以

如:int count=10;

       int arr2[count];//这样就不行

 所以,数组的创建,[ ]中要给一个常量才可以,不能使用变量。

2.数组的初始化:

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

   如:

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

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

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

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

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

          char arr6[ ]="abcdef";

   数组在创建的时候如果想不指定数组的确定的大小就得初始化,数组的元素个数根据初始化的内容来确定。

   如下面的代码的内存分配:

   char arr1[ ]="abc";//内存分配:'a' 'b' 'c' '\0'

   char arr2[3]={'a','b','c'};//内存分配:'a' 'b' 'c' 

   char *p="abcdef";//内存分配:p中存放了'a'的地址 

3.一维数组的使用

   如:

          #include<stdio.h>

          int main()

          {

                  int arr[10]={0};//数组的不完全初始化

                  //对数组内容赋值,数组是使用下标来访问的,下标从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;

          }

   总结:1>数组是使用下标来访问的,下表从0开始

              2>数组的大小可以通过计算得到。

               如:int arr[10];

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


4.一维数组在内存中的存储

   随着数组下标的增长,元素的地址,也在有规律地递增,所以,数组在内存中是连续存放的。

5.一维数组的指针访问

如:

#include<stdio.h>
int main()
{
int arr[5] = { 1, 2, 3, 4, 5 };
printf("%p\n", arr);//输出数组首元素的地址
printf("%d\n", *arr);//输出1
return 0;
}

结论:数组的数组名其实是数组的首元素地址

其实,通过 数组名+整数 的运算也可以得到数组每个元素的地址

如:

#include<stdio.h>
int main()
{
      int arr[10] = { 0 };
      int i = 0;
      int sz = sizeof(arr) / sizeof(arr[0]);
      for (i = 0; i < sz; i++)
      {
          printf("%p\n", &arr[i]);
          printf("%p\n", arr+i);//对于同一个i,这两个输出的地址一样
      }
   return 0;
}

所以,可以用指针来访问数组

#include<stdio.h>
int main()
{
      int arr[10] = { 0 };
      int i = 0;
      int *p_arr = arr;
      int sz = sizeof(arr) / sizeof(arr[0]);
      for (i = 0; i < sz; i++)
      {
          *(p_arr + i) = i;
      }
      for (i = 0; i < sz; i++)
      {
          printf("%d\n", *(p_arr + i));
      }
return 0;
}

二维数组

1.数组的创建和初始化

//数组的创建

int arr[3][4];
char arr[3][5];
double arr[2][3];

//数组的初始化

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

2.二维数组的使用

#include<stdio.h>
int main()
{
int arr[3][4] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
arr[i][j] = i * 4 + j;
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}

//输出为 0 1 2 3 

              4 5 6 7

              8 9 10 11

3.二维数组在内存中的存储

二维数组在内存中也是连续存储的。

4.二维数组的指针访问

如:

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

//

//输出为 0 1 2 3 

              4 5 6 7

              8 9 10 11




  

        

          



       


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值