一维数组的创建和初始化
创建:
int arr[10];
数组的初始化有三种方法:
1 直接初始化
//代码1
int arr[10] = { 0 };
//代码2
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
2 for循环初始化
void InitArr(int arr[], int sz)
{
for (int i = 0; i < sz; i++)
arr[i] = i;
}
注:上述代码中的sz是在主函数中算出来,然后传过来的,它表示数组中元素的个数,该参数不能在初始化函数中计算,因为数组穿过去的是首元素的地址,假如在初始化函数中计算,结果为1,而不是数组中元素的个数。
3 memset()函数初始化
void InitArr(int arr[], int sz)
{
memset(arr, 0, 40);
}
注:该函数的原型为
void *memset(void *ptr, int value, size_t num)
地址ptr开始的num个字节赋值value,是逐个字节赋值,ptr开始的num个字节中的每个字节都赋值为value。后面的40为数组arr的字节。
- 若ptr指向char型地址,value可为任意字符值;
- 若ptr指向非char型,如int型地址,要想赋值正确,value的值只能是-1或0,因为-1和0转化成二进制后每一位都是一样的;
假如需要赋值0~9,只能使用for循环。
一维数组的清空
数组的清空救比较简单了,就是把每个元素都变为0,可以变相理解为初始化为0。
void EmptyArr(int arr[])
{
memset(arr, 0, 40);
}
一维数组的逆置
将数组的首尾元素换位置即可
void ReverseArr(int arr[], int sz)
{
for (int i = 0; i < sz / 2; i++)
{
int tmp = arr[i];
arr[i] = arr[sz - 1 - i];
arr[sz - 1 - i] = tmp;
}
}
注: 上述方法中需要注意的是循环到数组一半长度就必须终止,要不然就又换回去了,和原数组一样。
一维数组的访问
1 直接访问
void PrintArr(int arr[], int sz)
{
for (int i = 0; i < sz; i++)
printf("%d ", arr[i]);
}
2 通过指针访问
void PrintArr(int arr[], int sz)
{
int *p = arr;
for (int i = 0; i < sz; i++)
printf("%d ", *(p+i));
}
注:上述代码将arr数组首个元素的地址赋给指针变量p,p+i表示第i个元素的地址,然后解引用*(p+i),就得到了第i个元素的数值。
一维数组的存储
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("&arr[%d] = %p\n", i, &arr[i]);
}
return 0;
}
注:int类型占四个字节,所以一维数组在内存中是连续存放的。
主函数
int main()
{
int arr[10] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
InitArr(arr, sz);
PrintArr(arr, sz);
printf("\n");
ReverseArr(arr, sz);
PrintArr(arr, sz);
printf("\n");
return 0;
}
附:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void InitArr(int arr[], int sz)
{
for (int i = 0; i < sz; i++)
arr[i] = i;
}
void PrintArr(int arr[], int sz)
{
int *p = arr;
for (int i = 0; i < sz; i++)
printf("%d ", *(p+i));
}
void EmptyArr(int arr[], int sz)
{
memset(arr, -1, 40);
}
void ReverseArr(int arr[], int sz)
{
for (int i = 0; i < sz / 2; i++)
{
int tmp = arr[i];
arr[i] = arr[sz - 1 - i];
arr[sz - 1 - i] = tmp;
}
}
int main()
{
int arr[10] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
InitArr(arr, sz);
PrintArr(arr, sz);
printf("\n");
ReverseArr(arr, sz);
PrintArr(arr, sz);
printf("\n");
return 0;
}