栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言:数组进阶I

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言:数组进阶I

一维数组名不作为指向数组首地址的指针使用
  1. 计算数组大小:sizeof(arr)
  2. 对数组名取地址:&arr
    得到数组指针,步长是整个数组的长度

数组名是一个指针常量,指针的指向不可以修改,而指针指向的值可以修改

数组指针的定义方式
  1. 先定义数组类型,再通过类型定义数组指针
void test0201() {
	int arr[5] = { 1,2,3,4,5 };
	//array_type表示存放5个int类型元素的数组的数组类型
	typedef int(array_type)[5];
	array_type arr2;
	for (size_t i = 0; i < 5; i++)
	{
		arr2[i] = 100 + i;
	}
	for (size_t i = 0; i < 5; i++)
	{
		printf("%dn", arr2[i]);
	}
	//arr2[5] = 0;

	array_type* arrp = &arr;
	for (size_t i = 0; i < 5; i++)
	{
		printf("%dn", (*arrp)[i]);
	}
}
  1. 先定义数组指针类型,再通过类型定义数组指针
void test0202() {
	int arr[5] = { 1,2,3,4,5 };
	typedef int(*array_type)[5];
	array_type arrp = &arr;
	for (size_t i = 0; i < 5; i++)
	{
		printf("%dn", (*arrp)[i]);
	}
}
  1. 直接定义数组指针变量
void test0203() {
	int arr[5] = { 1,2,3,4,5 };
	int(*p)[5]  = &arr;
	for (size_t i = 0; i < 5; i++)
	{
		printf("%dn", (*p)[i]);
	}
}
二维数组

除了sizeof(arr)和&arr外,二维数组名称是指向第一个一维数组的数组指针

void test0301() {
	int arr[3][3] = {1,2,3,4,5,6,7,8,9};
	int(*p)[3] = arr;
	printf("%dn",sizeof(p));//输出4
	printf("%dn",sizeof(*p));//输出12
	int(*parray)[3][3] = &arr;

	printf("%dn", arr[1][2]);//输出6
	printf("%dn", p[1][2]);//输出6
	printf("%dn", *(*(p+1)+2));//输出6
}
二维数组做函数参数
//void printArray03(int arr[][3], int row, int col);
//void printArray03(int (*arr)[3], int row, int col);
void printArray03(int arr[3][3],int row,int col) {
	for (size_t i = 0; i < row; i++)
	{
		for (size_t j = 0; j < col; j++)
		{
			//printf("%d ", arr[i][j]);
			printf("%d ", *(*(arr+i)+j));
		}
	}
}
数组指针和指针数组

数组指针:指向数组的指针
指针数组:由指针组成的数组

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931445.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号