【数组作函数参数 退回为一个指针】
1 正确做法:把数组的内存首地址和数组的有效长度传给被调用函数
2 实参a 和 形参a 的数据类型本质不一样
形参中的数组 ,编译器会把它当成指针处理——这是C语言的特色。
只会分配四个字节(所分配连续内存空间的首元素的地址)的内存,不会分配4*7个字节的内存
void sortArray(int a[7], int num)
3 形参写在函数名后面的括号()里,和写在函数的函数体{}内是一样的,只不过是具有对外的属性而已.
#include "stdlib.h"
#include "string.h"
#include "stdio.h"
//void printArray(int a[7], int num)
//void printArray(int a[], int num)
void printArray(int *a, int num)
{
int i = 0;
for (i=0; i<num; i++)
{
printf("%d ", a[i]);
}
}
//数组作函数参数,C语言会把它优化为一个指针
//只会分配四个字节的内存,不会分配4*7个字节的内存
void sortArray(int a[7], int num)
//void sortArray(int a[], int num)
//void sortArray(int *a, int num)
{
int i , j , tmp ;
int num2 = 0;
num2 = sizeof(a)/sizeof(a[0]);
printf("num:%d \n", num2);
//实参a 和 形参a 的数据类型本质不一样
//形参中的数组, 编译器会把它当成指针处理——这是C语言的特色
for(i=0; i<num; i++)
{
for (j=i+1; j<num; j++)
{
if (a[i] > a[j])
{
tmp = a[i];
a[i]= a[j];
a[j] = tmp;
}
}
}
}
/*
void main()
{
int i = 0, j = 0;
int tmp = 0;
int num = 0;
int a[] = { 33, 654, 4, 455, 6, 33, 4 };
num = sizeof(a) / sizeof(a[0]);
printf("排序之前\n");
for (i = 0; i < 7; i++)
{
printf("%d ", a[i]);
}
sortArray(a, num);
printf("排序之后\n");
printArray(a, num);
printf("hello...\n");
system("pause");
}
*/
只会分配四个字节的内存,不会分配4*7个字节的内存
void sortArray(int a[7], int num)
//void sortArray(int a[], int num)
//void sortArray(int *a, int num)
{
int i , j , tmp ;
int num2 = 0;
num2 = sizeof(a)/sizeof(a[0]);
printf("num:%d \n", num2);
//实参a 和 形参a 的数据类型本质不一样
//形参中的数组, 编译器会把它当成指针处理——这是C语言的特色
for(i=0; i<num; i++)
{
for (j=i+1; j<num; j++)
{
if (a[i] > a[j])
{
tmp = a[i];
a[i]= a[j];
a[j] = tmp;
}
}
}
}
/*
void main()
{
int i = 0, j = 0;
int tmp = 0;
int num = 0;
int a[] = { 33, 654, 4, 455, 6, 33, 4 };
num = sizeof(a) / sizeof(a[0]);
printf("排序之前\n");
for (i = 0; i < 7; i++)
{
printf("%d ", a[i]);
}
sortArray(a, num);
printf("排序之后\n");
printArray(a, num);
printf("hello...\n");
system("pause");
}
*/