总结——数组。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结——数组。相关的知识,希望对你有一定的参考价值。
今天总结数组的相关知识,重点介绍一维数组和二维数组两部分内容。
一、数组的创建。
数组由——类型 数组名 [常量或常量表达式]——构成。
例如:
int arr[10] = {0};
需要特别注意的下标引用操作符中间不能出现变量,
例如:
int m = 10; int arr[m] = {0};
这种创建数组的方式是错误的!
但是你可以通过 #define 来定义标识符常量。
还要特别注意的是,数组类型不单单指前面的 int 、char 等类型,
也包括后面下标引用操作符中的内容。
二、数组的初始化。
数组初始化有两种情况:
1、不完全初始化,例如:
int arr[10] = {1,2,3};
2、完全初始化,如:
int arr[3] = {1,2,3}; int arr[] = {1,2,3};
三、字符数组。
1、字符数组在创建时有如下方式:
char [3] = { ‘a‘, 98, ‘c‘}; char [3] = { ‘a‘, ‘b‘, ‘c‘}; char [] = "abcdef";
现对第三种方式进行讨论:
当用 sizeof() 对数组 arr[] 求大小时,输出的值是7,
具体原因是这种方式会在元素 f 末尾加上一个隐藏的 “\0”,“\0”大小会占一个单位。
如用 strlen() 对数组 arr[] 求长度时,输出的值是6,
这里是因为 strlen() 这个函数在统计时不会统计“\0”。
2、当用指针指向数组时,
char *p = "abcdef";
sizeof(p)——输出值为4,这里的p为指针,而指针大小为4;
strlen(p)——输出值为6,理由同数组arr中一致。
这里需要注意的是:
char arr1[] = "abcdef"; char arr2[] = "abcdef"; char *p1[] = "abcdef"; char *p2[] = "abcdef";
在使用相等判断条件时,
if (arr1 == arr2);//错误 if (p1 == p2);//正确,p中存放的都是"abcdef"的地址
四、数组注意事项。
1、有两种创建二维数组的情况,如下:
int arr[3][5] = { {1,2}, {4,5}}; int arr[][5] = { {1,2}, {4,5}};//行的信息是可以省略的,而列不行
2、在一维数组中,数组名代表首元素的地址;而在二维数组中,数组名不能代表 arr[0][0] 的地址。
int *p = arr1;//一维数组 int *p = &arr2[0][0];//二维数组
3、arr[i] = *(arr+i) = *(i+arr) = i[arr]
五、数组计算。
1、一维整型数组的 sizeof 相关计算。
#include<stdio.h> int main() { 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 + 1));//4(跳过整个数组) printf("%d\n", sizeof(&a[0]));//4 printf("%d\n", sizeof(&a[0] + 1));//4 system("pause"); return 0; }
2、一维字符数组的 sizeof 相关计算。
#include<stdio.h> int main() { 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]));//4 printf("%d\n", sizeof(*&arr));//6 system("pause"); return 0; }
3、一维字符数组的 strlen 相关计算。
printf("%d\n", strlen(arr));//随机值 printf("%d\n", strlen(arr + 0));//随机值 printf("%d\n", strlen(*arr));//错误代码 printf("%d\n", strlen(arr[1]));//错误代码 printf("%d\n", strlen(&arr));//随机值 printf("%d\n", strlen(&arr + 1));//随机值 printf("%d\n", strlen(&arr[0]));//随机值 printf("%d\n", strlen(*&arr));//随机值
4、指针访问数组的 sizeof 相关计算。
#include<stdio.h> int main() { char *p = "abcdef"; printf("%d\n", sizeof(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(p地址的后面) printf("%d\n", sizeof(&p[0] + 1));//4 system("pause"); return 0; }
5、指针访问数组的 strlen 相关计算。
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
6、另一种方式的一维字符数组 sizeof 相关计算。
#include<stdio.h> int main() { char arr[] = "abcdef"; printf("%d\n", sizeof(arr));//7 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", sizeof(*&arr));//7 system("pause"); return 0; }
7、另一种方式的一维字符数组 strlen 相关计算。
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));//6 printf("%d\n", strlen(&arr + 1));//随机值 printf("%d\n", strlen(&arr[0] + 1));//5
数组名单独放在 sizeof 内部,数组名表示整个数组。
数组名:数组名表示整个数组,&数组名表示数组的地址。
除此之外,所有遇到的数组名都是数组首元素的地址。
8、二维整型数组的 sizeof 相关计算。
#include<stdio.h> int main() { int a[3][4] = { 0 }; printf("%d\n", sizeof(a));//48 printf("%d\n", sizeof(a[0][0]));//4 printf("%d\n", sizeof(a[0]));//16 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 system("pause"); return 0; }
以上是关于总结——数组。的主要内容,如果未能解决你的问题,请参考以下文章