Ⅰ 编程c语言形参与实参是什么意思
形参:全称为"形式参数"是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传如的参数.
实参:全称为"实际参数"是在调用时传递个该函数的参数.
形参和实参的类型必须要一致,或者要符合隐含转换规则,
当形参和实参不是指针类型时,在该函数运行时,形参和实
参是不同的变量,他们在内存中位于不同的位置,形参将实
参的内容复制一份,在该函数运行结束的时候形参被释放,
而实参内容不会改变.
而如果函数的参数是指针类型变量,在调用该函数的过程
中,传个函数的是实参的地址,在函数体内部使用的也是
实参的地址,即使用的就是实参本身.所以在函数体内部
可以改变实参的值.
给你一个很简单的例子:
int
f(int
b)
/*b为形参*/
{
return
b;}
main()
{int
a=1;
printf("%d",f(a));/*a为实参*/
}
Ⅱ C语言中实参与形参的区别
形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量不能使用。
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。而实参在主调函数中已分配内存单元。
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,都必须具有确定的值,以便把这些值传送给形参。
实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。
函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。
Ⅲ C中数组在函数中形参和实参的区别
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printArray(int a[],int num){
int i;
for(i=0;i<num;++i){
printf("%d ",a[i]);
}
}
//void sortArray(int a[],int num){
//数组做函数参数的退回问题,退回为一个指针
//结论1:把数组的内存首地址和数组的有效长度给被调函数
// 结论2: 实参的a和形参的a本质不一样 ,实参是数组形参把他当数组处理
// 形参写在函数上,和写在函数内是一样的,只不过是具有对外的属性而已
void sortArray(int *a,int num){
int i,j,temp;
//排序
//int num2 = sizeof(a)/sizeof(a[0]);
//这里测试的是关于指针的长度,可以看到num2等于1不等于原来的长度
//证明传过来的只是一个指针,数组退化成指针了 ,所以说
//printf("num2=%d\n",num2);
for(i=0;i<num;++i){
for(j=i+1;j<num;++j){
if(a[i]<a[j]){
//交换
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
int main(){
int a[] = {16,35,24,68};
int num;
//数组总体长度除以单个的长度
num = sizeof(a)/sizeof(a[0]);
printArray(a,num);
printf("排序前!\n");
sortArray(a,num);
printArray(a,num);
printf("排序后!\n");
return 0;
}
Ⅳ c语言中形参和实参是什么意思有什么区别
形参就是形式参数,用一个变量代表大家。实参就是实际参数,用一个 确切的数值代替形式参数,可以是表达式。实际参数与形式参数的参数个数、类型和顺序都应一样,如果不一样的话,系统会强制转换,这样会造成数据的丢失。实 参向形参的传递是值的传递。
这个值就是对实参的表达式进行计算的结果,它可以是常量值、变量值、数组元素、函数值等。如果实参是数组名了,那么它传送的就是地址的值了。比如:
double power(double x ,int n)定义一个双精度参数
power(3.0,5) 调用
x n 是形参,3.0,5是实参。如果上面定义的是整形 double power(int x ,int n),下面调用的是power(3.3,5)那么实参中3.3会被转换成3,一部分数据丢失了。
Ⅳ c语言中,形参和实参是什么意思有什么区别
形参就是形式参数,用一个变量代表大家。实参就是实际参数,用一个 确切的数值代替形式参数,可以是表达式。实际参数与形式参数的参数个数、类型和顺序都应一样,如果不一样的话,系统会强制转换,这样会造成数据的丢失。实 参向形参的传递是值的传递。
这个值就是对实参的表达式进行计算的结果,它可以是常量值、变量值、数组元素、函数值等。如果实参是数组名了,那么它传送的就是地址的值了。比如:
double power(double x ,int n)定义一个双精度参数
power(3.0,5) 调用
x n 是形参,3.0,5是实参。如果上面定义的是整形 double power(int x ,int n),下面调用的是power(3.3,5)那么实参中3.3会被转换成3,一部分数据丢失了。
Ⅵ C语言实参数组与形参数组问题
这个问题是这样的了,因为你的数组定义的是二维大小是20*20 地址空间已经分配好了,而但你输入的m和n的值小于20的时候,你只是先给第一维赋值,如果输入的数字大于20,在对第二维赋值,但你输入一些小的m和n时,其实二维数组你还没有赋值,他们的值还是你默认给的0啊,而当你用二维数组去读数的时候 a[0][j]的值就是从a[0]开始,所以结果是对的.
但是a[1][j]的地址却是&a[0][0]+4*20,可以看出你并没对那里赋值。
你可以把数组改小一点,如3*3啊,4*4啊什么的然后输入看结果就是对的了
你可以用我的这个程序去看看运行后的结果,你就会明白了:
#include<string.h>
main()
{
void enter(int ar[],int n,int m);
int a[20][20]={0},n,m,i,j;
printf("enter the N and M:");
scanf("%d%d",&n,&m);
enter(a[0],n,m);
printf("\n");
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
printf("%3d-%d ",a[i][j],&a[i][j]); //打印每个数组元素的地址
printf("\n");
}
system("pause");
}
void enter(int ar[],int n,int m)
{
int i,j;
for(i=0;i<n*m;i++)
scanf("%d",&ar[i]);
for(i=0;i<n*m;i++)
printf("%d ",&ar[i]);//打印地址
printf("\n");
}
Ⅶ c语言中 数组实参和形参的设置。
可以,你这个问题涉及到变量的作用域的问题,a[10]这个数组变量只作用于main()函数中,新的函数fun中的实参*a作为在函数作用于中有效,所以双方互不影响。