先看一个例子(乱入了跟这个标题没有关系)
#include <stdio.h>
#include <math.h>
int fun(int arr[], int t) {
int maxIndex = 0; // 初始化最大值的位置下标为数组的第一个元素位置
int i;
// 从数组的第二个元素开始遍历
for (i = 1; i < t; i++) {
// 如果当前元素大于最大值,则更新最大值的位置下标
if (arr[i] > arr[maxIndex]) {
maxIndex = i;
}
}
return maxIndex;
}
int main() {
int N;
printf("请输入数组元素个数 N:");
scanf("%d", &N);
// 根据公式 x[i] = N * sin(i * 0.16) 给数组赋值
int x[N];
int i;
for (i = 0; i < N; i++) {
x[i] = N * sin(i * 0.16);
}
// 调用函数 fun(),并输出返回值
int maxIndex = fun(x, N);
printf("数组中最大值的位置下标为:%d\n", maxIndex);
return 0;
}
先看一个例子
#include<stdio.h>
int AD(int i, int b)
{
i = 10;
return 0;
}
int main()
{
int a = 3;
int b = 5;
AD(a, b);
printf("%d", a);
return 0;
}
这里的输出结果仍热为3,故改变形参的值,实参并不会发生改变;因此形式参数只在函数中有效。
传址调用是什么?传址调用是把变量的内存地址传递给函数参数的一种调用函数的方式。
#include<stdio.h>
int AD(int* p, int b)
{
*p = 10;
return 0;
}
int main()
{
int a = 5;
int b = 3;
//scanf("%d", &a);(加了scanf说明要从屏幕读取输入,本处是意在直接通过调用函数改变a的值,故不需要scanf!如果加上了scanf(“%d”,&a)会导致要输入一个值之后才能输出10
int* pa = &a;
AD(pa, b);
printf("%d\n", a);
return 0;
}