数组的本质:多个变量。
数组的长度不可变,且元素类型一致。
1,创建数组
创建指定长度的数组:
int a[10];
int类型,10个元素。
创建之后可以赋值:
int a[10]={1,2,3};
前三个为123,后面为0。
也可以由赋值来决定长度:
int a[] = {1, 2, 3};
三个元素,123。
2,sizeof
sizeof a:获取a占据的字节数
简单使用:int a[3]
#include <stdio.h>
int main() {
int a[3];
printf("%ld\n", sizeof a);
return 0;
}
效果:12,3个4。
获取数组的长度:总字节数除以单位字节数。
#include <stdio.h>
int main() {
int a[3];
printf("%ld\n", sizeof a / sizeof a[0]);
return 0;
}
效果:
3,下标访问
由下标可以访问数组的元素。 下标从0开始。
a[0] 数组a的第一个元素
a[1] ...第二个元素
由循环可以遍历一个数组。
#include <stdio.h>
int main() {
int a[] = {1, 3, 2, 4, 6, 5, 7};
for (int i = 0; i < sizeof a / sizeof a[0]; i++) {
printf("%d\n", a[i]);
}
return 0;
}
效果:
4,内存探秘
%p:指针地址值
#include <stdio.h>
int main() {
int a[] = {1, 3, 2, 4, 6, 5, 7};
for (int i = 0; i < sizeof a / sizeof a[0]; i++) {
printf("%d:%p\n", a[i], &a[i]);
}
return 0;
}
效果:每个加4,代表int。
结论:数组,在空间上是一块连续的内存。
十六进制: 8,9,A,B,C,D,E,F,0
5,多维数组
多维数组:数组的元素是数组。
#include <stdio.h>
int main() {
int a[3][4];
printf("%ld\n", sizeof a);
return 0;
}
效果:48。 三行四列,十二个元素,乘以四。
也可以赋值,遍历:
#include <stdio.h>
int main() {
int a[3][4] = {{1, 2, 3, 4}, {11, 22, 33, 44}, {111, 222, 333, 444}};
int len1 = sizeof a / sizeof a[0];
int len2 = sizeof a[0] / sizeof a[0][0];
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
printf("%d\t", a[i][j]);
}
printf("\n");
}
return 0;
}
效果:
番外:数组与指针
数组名
数组名代表首个元素的指针。 解指针后,可以得到首个元素。
#include <stdio.h>
int main() {
int arr[3] = {1, 2, 3};
printf("%d\n", *arr);
return 0;
}
效果:
简单使用
交换长度为2数组的两个值。
#include <stdio.h>
void swap(int *arr) {
int temp = *arr;
*arr = *(arr + 1);
*(arr + 1) = temp;
}
int main() {
int arr[2] = {11, 22};
swap(arr);
printf("%d,%d\n", arr[0], arr[1]);
return 0;
}
效果:
分析: swap(arr):传入的是,首个元素的地址指针。 temp = *arr:将首个元素的值赋值给temp。 *arr = *(arr + 1):首个元素的指针改为第二个元素的值。 *(arr + 1) = temp:第二个元素的指针改为temp。
|