81 lines
1.6 KiB
C
81 lines
1.6 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
#include <math.h>
|
|
#include <stdbool.h>
|
|
|
|
// !指针应用场景
|
|
/*
|
|
1.函数返回多个值,某些值不方便直接返回,只能通过指针返回,传入的参数实际上是需要保存带回的结果的变量
|
|
2.函数返回运算的状态,结果通过指针返回。常用的套路是让函数返回特殊的不属于有效范围内的 值来表示出错:-1或0(在文件操作会看到大量的例子)。当任何数值都是有效的可能结果时,就得分开返
|
|
|
|
*/
|
|
|
|
void swap(int *pa, int *pb);
|
|
void minmax(int c[], int len, int *max, int *min);
|
|
int divide(int a, int b, int *result);
|
|
|
|
int main(void)
|
|
{
|
|
/* 1.交换两个变量的值 */
|
|
int a = 5;
|
|
int b = 6;
|
|
|
|
swap(&a, &b);
|
|
printf("a = %d, b = %d\n", a, b);
|
|
|
|
/* 2.返回多个值*/
|
|
int c[] = {1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55};
|
|
int min, max;
|
|
minmax(c, sizeof(c) / sizeof(c[0]), &max, &min);
|
|
printf("max = %d, min = %d\n", max, min);
|
|
|
|
/* 3.返回运算的状态 */
|
|
int d=5;
|
|
int e=6;
|
|
int f;
|
|
if (divide(d,e, &f))
|
|
{
|
|
printf("%d/%d = %d\n", d, e, f);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void swap(int *pa, int *pb)
|
|
{
|
|
int t = *pa;
|
|
*pa = *pb;
|
|
*pb = t;
|
|
}
|
|
|
|
void minmax(int a[], int len, int *max, int *min)
|
|
{
|
|
int i;
|
|
*max = *min = a[0];
|
|
for (i = 1; i < len; i++)
|
|
{
|
|
if (a[i] < *min)
|
|
{
|
|
*min = a[i];
|
|
}
|
|
if (a[i] > *max)
|
|
{
|
|
*max = a[i];
|
|
}
|
|
}
|
|
}
|
|
|
|
int divide(int a, int b, int *result)
|
|
{
|
|
if (b==0)
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
*result = a / b;
|
|
}
|
|
|
|
return 1;
|
|
} |