数组的相关知识

今天来整理一些数组的相关知识

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

数组的创建方式: type_t  arr_name  [const_n]

                 数组元素类型        数组名         常量表达式,用来指定数组大小

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

数组的初始化:在创作数组的同时给数组的内容一些合理的初始值

数组的内存分配:

Eg:  char  arr1[] = abc-------------------4个元素(包含一个\0

      Char  arr2[] ={a, b, c}  ---------3个元素

      Char *p=abcdef ---------------------*p中放a的地址

2,一维数组的使用

 数组访问操作符:[ ]

数组是使用下标来访问的,下标是从0开始的。

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

eg:  int  arr[10]

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

3,一维数组在内存中的存储

数组在内存中是连续存放的。

4,指针的初步介绍

内存中的每一个内存单元(字节)对应一个地址

在32位平台上指针的大小是4个字节,64为平台上是8个字节

指针可以理解为一个变量,是一个专门用来存放地址的变量

Eg:  int  n=10

Int  *p_n=&n; -------------------将n的地址存放在p_n指针变量中 

      *p_n=20;---------------------改变的其实是n这个变量的内容

5,一维数组的指针访问

解引用操作符“*”的作用:当拿到指针的时候也能找到指针所指向的变量。

数组的数组名其实是数组首元素的地址。

Arr+1:同过对数组名加整数的运算,可以获取到数组每个元素的地址。

下面举例说明地址解引用:

Eg:  # include <stdio.h>

Int main()

{

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

Printf(%p\n,arr);-----------------------输出的是首元素的地址

Printf(%d\n,*arr);------------------------输出的是首元素 1

Return 0;

}

6,二维数的初始化

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

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

     int arr [ ][4]={{1,2}, {3,4}};------------------初始化时,元素个数行可省,列不可省。

7,二维数组在内存中的存储

二维数组在内存中是连续存储的,且是按行存储。将二维数组视为一维数组时,每一行  相当于一维数组的第一个元素,二维数组的数组名和第一行的行标合起来可看作一个数组名。

8,关于数组的运算

数组名代表整个数组时只有两种情况:

(1).   sizeof(数组名):计算这个数组的大小

(2).   &数组名:取出的是数组的地址

除此以外,所有数组名都表示数组首元素的地址

Eg:   int a[ ]={1,2,3,4}

   Printf(%d\n,sizeof(*&a));------------------------------输出16

 

Char arr[ ]={a,b,c,d,e,f};

Printf(%d\n,sizeof(*arr));--------------------------------输出1

Printf(%d\n,sizeof(arr[1]));------------------------------输出1

Printf(%d\n,strlen(*arr));--------------------------------内存访问出错

Printf(%d\n,strlen(arr[1]));------------------------------内存访问出错

Printf(%d\n,strlen(&arr));-------------------------------输出随机值

 

Char arr[ ]=abcdef;

Printf(%d\n,strlen(arr+0));------------------------------输出6

Printf(%d\n,strlen(&arr));-------------------------------输出6

Printf(%d\n,strlen(&arr+1));----------------------------输出随机值

 

Char *p=abcdef;

Printf(%d\n,strlen(&p));----------------------------------输出随机值

Printf(%d\n,strlen(&p[0]+1));---------------------------输出5

 

Int a[3][4]={0};

Printf(%d\n,sizeof(a[0]+1));------------------------------输出4(表示第一行第二个元素的地址

首元素地址

Printf(%d\n,sizeof(a+1));----------------------------------输出4(表示第二行地址

               第一行地址

Printf(%d\n,sizeof(&a[0]+1));----------------------------输出4(表示第二行地址

Printf(%d\n,sizeof(*a));------------------------------------输出16

Printf(%d\n,sizeof(a[3]));----------------------------------输出16(表示第四行

***只要是地址,无论何种类型,都占四个字节

***一个p指针有4个字节的空间

9,数组作为指针参数

数组作为函数参数时,不会把整个数组传递过去,实际上只是把首元素的地址传递过去了,所以函数内参数部分写成数组的形式:int arr[ ]表示的是一个指针:int *arr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值