数组在内存中的存储及sizeof 和strlen的使用

一.数组的创建和初始化

1.创建方式:  type_t(数组的元素类型)  arr_name     [const_n] (是一个常量的表达式,用来指定数组的大小)

创建数组 【】必须要给一个常量才可以,不能使用变

2.数组的初始化:在创建数组的同时给数组的内容一些合理初始值)

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

1.数组在内存中是连续存放的,如果是整型 int  地址差4个字节 

  访问arr[i], 编译器,是这样做的 *(arr+i)     arr --是首元素地址。也可以这样理解  arr+i = &arr[i]

三.指针

1.内存中的一个内存单元,对应一个地址。

2.在32位的平台上指针的大小是4个字节。64位平台是8个字节。

3.指针可以理解成一个变量,是一个用来存放地址的一个变量。

4.指针初始化  int*p = NULL   char  *p = NULL

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

6.数组名+整数的运算 ,可以获得数组每个元素的地址

四.sizeof与strlen

1.数组名单独放在sizeof内部,数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节

2.表示整个数组的还有  &+数组名  -- 虽然它表示的也是首元素的地址,但是有所不同:例  int  arr[] ={1,2,3}

    &arr   地址 ---0x0126FE34               arr 首元素地址 -- 0x0126FE34

   &arr+1 地址 --  0x0126FE40                 arr +1地址 --0x0126FE38

 3. int  arr[]={1,2.3}    对于 *arr   其实相当于  *(arr+0)也相当于  arr[o]

 4. char arr[] = {'a','b','c'}    arr+0 是首元素地址,&arr  整个数组的地址    &arr[0] 首元素的地址  

注意:

       strlen 是从起始地址往后读取内容

       这里sizeof   不需要‘\0’ 但是 strlen 必须要‘\0’否则求的是随机值    

       

5.char *p= "abcd"    在内存中开辟了一块空间 p  把首元素a的地址放在 p里 ,这里并没有创建数组。

6.在二维数组中  int a[3][4] = {0}  

                   sizeof(a)    =  48    ,这里的数组名表示整个数组

                    sizeof(a[0])  =  16 ,  a[0]  可以看做一维数组  ,相当于第一行

                    sizeof(a[0]+1) = 4 ,  a[0] 是第一行,第二列的元素

                     sizeof(a+1) = 4 ,第二行的地址

                    sizeof(&a[0]+1) =4 , 第二行的地址

                      sizeof(*a)= 16 ,第一行的元素                 把二维数组当一维数组来看

                  sizeof(a[3])= 16             sizeof 不运行内部表达式




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值