c语言学习笔记(指针数组)

int* ar[5]  //意思是5个元素的数组,每个数组都是整型指针
int* ar[5] = { &a ,&b ,&c ,&d }; // 数组指针
int(*pa)[5]; // 指针数组,是一个指针变量,将存放数组地址
*(ar[0]) = 100; //ar[0]存放的是a的地址,*(ar[0])就是a本身
*ar[1] = 200; // []的优先级为1,*的优先级为2,故*ar[1]也就是b本身

看优先级(),和[] 的优先级为1,而*的优先级为2,因此谁先于变量结合,就是什么

一维数组的应用(绝大多数都是查表法)

查表法:将一些事先计算好的结果,存储在数组中用到时直接按下标取数据,以节省运行时间,以空间换时间

int Get_YM_Day(int year, int month)
{
	static const int days[] = { 29 ,31 ,28 ,31 ,30 ,31 ,30 ,31 ,31,30 ,31 ,30 ,31 };
	if (month = 2 && IsLeap(year))
	{
		month = 0;
	}
	return days[month];
}

这里就是运用查表法,将所有可能的天数都写出来,然后根据情况取

static静态变量,存储在数据区

if(month > 2 && IsLeap(year)) 与if(IsLeap(year) && month > 2)   运行结果一样,但是前面是只有month > 2 才能运行后面,因此比后面的那个运行更快

冒泡排序:

定义大小为100的整型数组,使用随机函数给数组元素赋值,数值范围在1-100,并且排序,使用冒泡排序实现

#define ARSIZE 100
void Swap_p(int* ap, int* bp) // 交换函数
{
	int tmp = *ap;
	*ap = *bp;
	*bp = tmp;
}
void Print(const int* ip, int n)  //打印函数
{
	if (NULL == ip) return;
	for (int i = 0; i < n; i++)
	{
		printf("%4d", ip[i]);
		if ((i + 1) % 10 == 0)
		{
			printf("\n");
		}
	}
}
void Comp_Ar(const int* ip, int n) // 比较函数
{
	if (NULL == ip) return;
	for (int i = 1; i < n; i++)
	{
		for (int j = 0; j < n - i; j++)
		{
			if (ip[j] > ip[j + 1])
			{
				Swap_p(&ip[j], &ip[j + 1]);
			}
		}
	}
}
int main()
{
	int ar[ARSIZE] = { 0 };
	int val = 0; // 中间值
	for (int i = 0; i < ARSIZE; i++) // 给100个数值赋值
	{
		val = rand() % 100 + 1;
		ar[i] = val;
	}
	Print(ar, ARSIZE);
	printf("\n");
	Comp_Ar(ar, ARSIZE);
	Print(ar, ARSIZE);
	printf("\n");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值