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;
}