数组

C语言中的数组是一种将标量聚集成更大数据类型的方式。



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void PrintArray(int arr[], int n)
{
	printf("array:\n");
	for (int i = 0; i < n; i++) {
		// printf("%d\t", arr[i]);
		printf("%d\t", *(arr + i));
	}
	printf("\n");
}

// 数组做参数时,传递的是数组首地址的值
// 形参在内部退化成局部变量的指针
void PrintArgInfo(int arr[], int n)
{
	printf("function argument:\n");
	printf("arr:         0x%x\n", arr);            // int *
	printf("sizeof(arr): %d\n", sizeof(arr));      // 4
}

int main()
{
	// 一维数组
	// *(arr + x) = arr[x];
	int arr[3] = { 1, 2, 3 };

	PrintArray(arr, 3); 
	printf("arr:         0x%x\n", arr);            // int *
	printf("sizeof(arr): %d\n", sizeof(arr));      // 12
	printf("arr[1]:      %d\n", *(arr + 1));       //  arr[1] = 2

	PrintArgInfo(arr, 3);
	
	getchar();

	return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 二维数组作形参时,需要指定数组二维的大小
// 1)int arr[][m]; 2)int (*arr)[m]
// void Print2Array(int arr[][4], int n)
void PrintArray(int(*arr)[4], int n)
{
	printf("array:\n");
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < 4; j++) {
			printf("%d\t", arr[i][j]);
		}
		printf("\n");
	}
}

int main()
{
	// 二维数组,即数组的数组
	// *(*(arr + x) + y) = arr[x][y];
	int arr[3][4] = {
		1, 2, 3, 4,
		5, 6, 7, 8,
		1, 2, 3, 4
	};
	typedef int col4[4];
	col4 A[3];

	PrintArray(arr, 3);

	printf("&arr:           0x%x\n", &arr);            // int (*)[3][4]
	printf("sizeof(&arr):   %d\n", sizeof(&arr));      // 4

	// 数组做参数时,传递的是数组首地址的值
	printf("arr:            0x%x\n", arr);             // int (*)[4]
	printf("sizeof(arr):    %d\n", sizeof(arr));       // 48

	printf("arr[0]:         0x%x\n", arr[0]);          // int *
	printf("sizeof(arr[0]): %d\n", sizeof(arr[0]));    // 16

	printf("arr[1][2]:      %d\n", *(*(arr + 1) + 2)); // arr[1][2] = 7

	getchar();

	return 0;
}

总结
1) 数组名本质上是指向该数组首地址的常量指针
2) 数组做实参时,传递的是数组首地址的值;数组作形参时,在内部退化成局部变量的指针。
3) 多维数组,即数组的嵌套,可以看成是数组的数组
4) 二维数组作形参时,需要指定数组二维的大小。
5) 可以使用指针对数组元素进行操纵,arr[i] = *(arr + i)等价。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值