要注意的是:
1 &a[i] 是取a[i]的地址 如果只有数组名 那就代表该数组的首个元素的地址。
数组相邻两个元素地址相差的大小 和你数组的数据类型相关,例如char的相差是1.
int类型相差是4,double类型的时8。
2数组名做加减法是, 计算结果是 加减数*元素长度+首地址。
3:数组中的元素地址从低到高存放的。
4:在使用数组名作为参数时是调用地址值,并且必须声明元素个数。
用数组的进行的冒泡 并有详细注释
#include<stdio.h>
void function(int *a_math ,int z)//也可以写成void function(int a_math ,int z)
{
int i,j,k,t,f=1;
for (int i = 0; (i <z-1)&&f; ++i)//执行 元素个数-1次循环
{
//f的意义:当本身就是按顺序排列时不执行循环,是程序高效化。
f=0;
for (int j = 0;j<z-i-1; j++) //执行冒泡
if (a_math[j]>=a_math[j+1])
{
t=a_math[j],a_math[j]=a_math[j+1],
a_math[j+1]=t;f=1;
}
for(int i=0;i<9;i++)
{
printf(" %d ",a_math[i]);//显示每冒一次泡后的结果
}
printf("\n");
}
}
int main(void)
{
int a_math[9]={93,46,78,99,88,69,54,56,77};//声明并初始化一个数组。
function(a_math ,9); /数字作为参数时,传递的时地址值。而且必须说明其数组个数。
for(int i=0;i<9;i++)
{
// 数组名做加减法时 输出的结果=数组的首地址+元素长度*i.
printf("%p----%p\n",(a_math+i),&a_math[i]);
}
return 0;
}