c语言函数传参 c语言函数形参
大家好,c语言函数传参相信很多的网友都不是很明白,包括c语言函数形参也是一样,不过没有关系,接下来就来为大家分享关于c语言函数传参和c语言函数形参的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
c语言:字符串做为函数参数传递
1、值传递
void swap(int x,int y)
{ int temp= x;
x= y;
y= temp;
}void main()
{
int a= 10, b= 20;
swap(a, b);
}
执行后,并不会交换。
2、引用传递
void swap(int&x,int&y)
{ int temp= x;
x= y;
y= temp;
}void main()
{
int a= 10, b= 20;
swap(a, b);
printf("a=%d
b=%d
", a, b);
}
执行后,发生交换。
3、指针传递
void swap(int*x,int*y)
{ int temp=*x;*x=*y;*y= temp;
}void main()
{
int a= 10, b= 20;
swap(&a,&b);
printf("a=%d
b=%d
", a, b);
}
执行后,发生交换。
参数传递只有上面三种,但是如果加上数组,就会产生几种新形式。
首先,明确数组型变量名本身只是该数组所占存储空间的首地址:
int a[3]={ 1, 2, 3}; int*p= a;//等价于下行//int*p=&a[0];
printf("%d",*p);
典型的数组做参数。
void fun(char s[]){ for(int i= 0; s[i]!='\0'; i++)
printf("%c", s[i]);
}void main()
{ char str[]="Hello World!";
fun(str);
}
函数调用时,这里系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。
其实本质与下相同,只不过还是数组形式的(数组名代替指针)。
既然数组型变量名本身只是该数组所占存储空间的首地址,我们当然可以用指针做形参来接收数组实参。
void fun(char*p){ while(*p)
{
printf("%c",*p);
p++;
}
}void main()
{ char str[]="Hello World!";
fun(str);
}
不过问题是如果这样,无法把握数组结束(除非知道数组长度)。而对于字符数组(上例),由于字符串末尾有结束标志'\0'(ascii码正好是0),所以就很容易利用指针来判断字符串是否结束。
扩展资料:
调用带参数的函数:
在调用函数时,可以向其传递值,这些值被称为参数。
这些参数可以在函数中使用。
可以发送任意多的参数,由逗号(,)分隔:
myFunction(argument1,argument2)。
当声明函数时,请把参数作为变量来声明:
function myFunction(var1,var2){这里是要执行的代码}。
变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。
按值传递参数:
按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。
按值传递参数时,需要在参数名前加"ByVal"关键字。
按地址传递参数:
按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。
如果实参是一个常数或表达式,Visual Basic 6.0会按"传值"方式来处理,按地址传递不需要"ByVal"关键字。
按数组传递参数:
在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:
①在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。
②被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。
参考资料来源:百度百科-参数传递
参考资料来源:百度百科-字符串
如何在 C 语言函数中传递数组作为参数
在C语言中,可以通过以下两种主要方式将数组作为参数传递给函数:
1.传递指针这是最常用的方法,直接传递数组的首地址。函数通过指针访问和修改数组元素,操作会影响原始数组。
实现步骤:函数定义:使用指针类型参数(如int*arr)接收数组。函数调用:传递数组名(自动转换为首地址)和数组大小。示例代码:void func(int*arr, int size){ for(int i= 0; i< size; i++){ arr[i]*= 2;//修改会影响原数组}}int main(){ int arr[]={1, 2, 3}; int size= sizeof(arr)/ sizeof(arr[0]); func(arr, size);//传递数组名和大小 return 0;}2.传递数组名(隐式指针)数组名在参数中会被视为指向首元素的指针,语法上更直观,但本质与指针传递相同。
实现步骤:函数定义:使用数组语法(如int arr[]或int arr[SIZE])声明参数,实际仍为指针。函数调用:同指针传递,直接传递数组名。示例代码:void func(int arr[], int size){//等价于 int*arr for(int i= 0; i< size; i++){ printf("%d", arr[i]);}}int main(){ int arr[]={4, 5, 6}; func(arr, 3);//传递数组名和大小 return 0;}关键注意事项:数组大小传递:必须额外传递数组长度(如size),因为函数内无法通过指针参数直接获取数组长度。指针安全性:确保指针有效(非NULL)。
避免越界访问(如arr[-1]或arr[size])。
多维数组:需明确指定除第一维外的维度(如int arr[][3])。总结:推荐方式:优先使用指针语法(int*arr),因其更明确地表达了参数是指针。本质相同:无论用int arr[]还是int*arr,函数内部均通过指针操作数组。修改影响:两种方式均允许函数修改原始数组内容。通过合理选择传递方式并注意边界条件,可以安全高效地在C函数中操作数组参数。
C语言参数传值
1.实参是数组元素,则形参一般是指针,指针指向实参数组首地址,也就是将实参的地址传递给形参.形参地址存储的值发生变化时,实参的值也将发生变化.
2.形参是指针,实参是函数,传递给形参指针变量的值是实参函数的地址.实参和形参的地址指向完全相同,即函数的内存首地址.
3.函数的形参和实参都是数组,传递的是实参的值,而非实参地址,形参和实参是两个完全独立的数组,只是将实参的值赋给了形参.
好了,关于c语言函数传参和c语言函数形参的问题到这里结束啦,希望可以解决您的问题哈!