形参中的数组
数组在形参中有3种不同的表达方式
#include <stdio.h>
//1、形参中的数组,不是数组元素,它是普通的数组指针变量
//2、形参数组:int a[100000],int a[], int *a对编译器而言,没有任何区别。编译器都是当做int *处理
//3、形参中的数组和非形参数组区别:形参中的数组时指针变量,非形参数组就是数组
//void print_array(int a[100000])
//void print_array(int a[])
void print_array(int *a)
{
int i = 0;
//64位系统,sizeof(a),a是指针变量,结果为8
//sizeof(a[0])第0个元素,是int类型,结果为4
int n = sizeof(a)/sizeof(a[0]);
printf("sizeof(a) = %d\n", sizeof(a));
printf("sizeof(a[0]) = %d\n", sizeof(a[0]));
for (i = 0; i < n; ++i)
{
printf("%d\n", a[i]);
}
printf("\n");
a = NULL;//形参中的数组,不是数组,它是普通指针变量
}
void print_array2(int a[], int n)
{
int i = 0;
for(i = 0; i < n; i++)
{
printf("%d, ", a[i]);
}
printf("\n");
}
int main(int argc, char const *argv[])
{
int a[] = {1, -2, 3, -4, -5, -6, 7, -9, 9};
//print_array(a);//传递的是,数组的首元素地址,&a[0]
//a = NULL;
int n = sizeof(a)/sizeof(a[0]);
print_array2(a, n);//应该把数组元素个数传递过去
return 0;
}
int main01(int argc, char const *argv[])
{
int a[] = {1, -2, 3, -4, -5, -6, 7, -9, 9};
int i = 0;
int n = sizeof(a)/sizeof(*a);
//排序前
printf("排序前\n");
for(i = 0; i < n; i++)
{
printf("%d\n", a[i]);
}
printf("\n");
//冒泡排序
int j = 0;
int tmp;
for (i = 0; i < n-1; i++)
{
for (int j = 0; j < n-1-i; j++)
{
if(a[j] > a[j+1])//升序
{
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
//排序后
printf("排序后\n");
for (i = 0; i < n; ++i)
{
printf("%d\n", a[i]);
}
printf("\n");
return 0;
}