数组的相关知识!!!!

这篇博客我大概总结以下几点知识

第一个:一维数组   1)

第二个:二维数组   2)

第三个:数组的相关运算  3)

 

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

     1.1)   数组创建方式     type_t        arr_name        [const_n]

                                          (类型)           (数组名)          (常量值)

                 例如:      int  arr [10] ;      // [ ]中不能存放变量,要放一个常量才可以 

    1.2)     数组初始化       char  arr [ ] = "abc";      // 这里的字符串里面隐含一个 '\0'  sizeof(arr) = 4

                                 char  arr [ ] = {'a','b','c'};     //这里的字符后面没有一个 '\0'  sizeof(arr) = 3

                                 char  arr [ ] = {'a','b','c','\0'};     //这里的字符后面有一个 '\0'  sizeof(arr) = 4

    1.3)    数组用 [ ] 来访问数组内部元素    arr[0]  表示素组 arr 的第一个元素

    1.4)    数组在内存中的存储是“”连续的“”

    1.5)    数组名 + 整数    其实就是数组每个元素的地址    arr+i   第i个元素的地址

 

2)     二维数组的使用

 

     2.1)   数组创建方式     type_t        arr_name        [const_n]  [const_n]

                                          (类型)           (数组名)          (常量值)     (常量值)

                 例如:      int  arr [10] [10] ;      // [ ]中不能存放变量,要放一个常量才可以 

    2.2)    数组用 [ ] [ ]来访问数组内部元素    arr[0][0]  表示素组 arr 的第一行的第一个元素

    2.3)    数组在内存中的存储是“”连续的“”

 

3) 数组的相关运算

//一维数组

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

printf("%d\n",sizeof(a));      //16

printf("%d\n",sizeof(a+0)); //4

printf("%d\n",sizeof(*a)); //4

printf("%d\n",sizeof(a+1)); //4

printf("%d\n",sizeof(a[1])); //4

printf("%d\n",sizeof(&a)); //4

printf("%d\n",sizeof(*&a)); //  错了 应该是16 它表示整个数组a的所有元素

printf("%d\n",sizeof(&a+1)); //4

printf("%d\n",sizeof(&a[0])); //4

printf("%d\n",sizeof(&a[0]+1));//4

 

//字符数组

 

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

printf("%d\n", sizeof(arr)); //6

printf("%d\n", sizeof(arr+0)); //4    //是第一个元素的地址

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

printf("%d\n", sizeof(arr[1])); //1

printf("%d\n", sizeof(&arr)); //4

printf("%d\n", sizeof(&arr+1));//4

 printf("%d\n", sizeof(&arr[0]+1));//4

 

printf("%d\n", strlen(arr)); //随机值   从第一个元素开始往后数  没有遇到 '\0' 

printf("%d\n", strlen(arr+0)); //随机值   从第一个元素开始往后数  没有遇到 '\0' 

printf("%d\n", strlen(*arr)); //错误     字符a没有长度

printf("%d\n", strlen(arr[1])); //错误     字符a没有长度

printf("%d\n", strlen(&arr)); //随机值

printf("%d\n", strlen(&arr+1)); //随机值

printf("%d\n", strlen(&arr[0]+1));//随机值

 

char arr[] = "abcdef"; 

printf("%d\n", sizeof(arr)); //7    包含'\0'

printf("%d\n", sizeof(arr+0)); //4

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

printf("%d\n", sizeof(arr[1])); //1

printf("%d\n", sizeof(&arr)); //4

printf("%d\n", sizeof(&arr+1));//4

printf("%d\n", sizeof(&arr[0]+1));//4

 

 

printf("%d\n", strlen(arr));// 6

printf("%d\n", strlen(arr+0)); //6

printf("%d\n", strlen(*arr)); //错误

printf("%d\n", strlen(arr[1])); //错误

printf("%d\n", strlen(&arr)); //4  错  应该是6

printf("%d\n", strlen(&arr+1)); //4 错  随机值 

printf("%d\n", strlen(&arr[0]+1));//4 错   应该是5 从第二个元素开始数

 

char *p = "abcdef"; 

printf("%d\n", sizeof(p)); //4   变量p的大小是4

printf("%d\n", sizeof(p+1)); //4

printf("%d\n", sizeof(*p)); //1

printf("%d\n", sizeof(p[0])); //1

printf("%d\n", sizeof(&p)); //4

printf("%d\n", sizeof(&p+1)); //4

printf("%d\n", sizeof(&p[0]+1));//4

 

printf("%d\n", strlen(p)); //6

printf("%d\n", strlen(p+1)); //5

printf("%d\n", strlen(*p)); //错误

printf("%d\n", strlen(p[0])); //错误

printf("%d\n", strlen(&p)); //随机值    很重要

printf("%d\n", strlen(&p+1)); //随机值

printf("%d\n", strlen(&p[0]+1)); //5

//二维数组

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

printf("%d\n",sizeof(a)); //12*4=48

printf("%d\n",sizeof(a[0][0])); //4

printf("%d\n",sizeof(a[0])); //4*4=16

printf("%d\n",sizeof(a[0]+1)); //4

printf("%d\n",sizeof(a+1)); //4*4=16    错了  应该是 4

printf("%d\n",sizeof(&a[0]+1)); //4

printf("%d\n",sizeof(*a)); //16

printf("%d\n",sizeof(a[3]));//16

 

sizeof(数组名)  这里的数组名表示整个数组

&数组名            这里的数组名表示整个数组

除了这两种情况  其他的 数组名 都代表 首元素的地址

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值