c语言形参的值能不能传递给实参
发布时间:2025-05-13 07:25:24 发布人:远客网络
一、c语言形参的值能不能传递给实参
1、形参和实参拥有分别的存储空间,即便是指针传递,改变的也只可能是这个指针变量所指向的内容,而不是指针变量本身的值,也即,如有指针变量p,那对实参的变化,有可能改变的也只是*p的值,而不是p本身的值。
2、实参和形参在英文中,argument和parameter经常可以互换使用,但是C99标准规定了:
3、对于actualargument或actualparameter使用术语argument(译为实参);对于formalargument或formalparameter使用术语parameter(译为形参)。
4、为遵循这一规定,我们可以说形参是变量,实参是函数调用提供的值,实参被赋给相应的形参。因此,在上述示例中,times是pound()的实参,n是pound()的形参。类似地,在函数调用pound(times+4)中,表达式times+4的值是该函数的实参。
5、第1个函数调用是pound(times),times的值5被赋给n。因此,printf()函数打印了5个井号和1个换行符。第2个函数调用是pound(ch)。
6、这里,ch是char类型,被初始化为!字符,在ASCII中ch的数值是33。但是pound()函数的参数类型是int,与char不匹配。
7、程序开头的函数原型在这里发挥了作用。原型(prototype)即是函数的声明,描述了函数的返回值和参数。pound()函数的原型说明了两点:
8、-该函数没有返回值(函数名前面有void关键字);-该函数有一个int类型的参数。
二、请问在C语言中,函数传参时怎样利用指针传递数组
1、非数组类的声明尽量以指针的方式进行比较好。倘若一个指针指向的内存并不是一个数组,那么采用数组名的声明方式或许就会给人产生错误的引导。类似的,如果指向的是一个数组区域,则会给人以更加丰富的信息。例如:
2、int main(int argc,char* argv[])
3、int main(int argc,char** argv)
4、两种方式完全等价,但是前面一种能够更清晰地看出:这个参数是指向某个元素起始地址的指针,而后面的这种方式则不能够直观地看出这种含义。
三、指针数组 作为参数传递
1、a是指针数组,元素是char指针,数组传递的时候编译器只会传递数组地址,也就是a的地址,是指针数组的地址。
2、进入函数时,复制了份指针数组的地址,而不是数组本身。
3、char*p="add";//先在常量区放入"add",并将地址赋值给p
4、将p的值也就是常量字符串的地址赋值给a指向的数组中的第二个元素(元素类型是char*),这就改变了实参a数组中第二个元素指针的指向,它指向了常量区的"add"。
5、由于此时a是个char*数组的地址副本,是局部变量,即形参,函数退出时会被退栈;而p本身是个指针,它也是个局部变量,在函数退出时会被退栈,但不会影响常量区,也就是说"add"字符串不会被释放,只在整个程序退出时释放。