c语言参数和指针(c语言指针形参和实参)

http://www.itjxue.com  2024-06-13 09:30  来源:IT教学网  点击次数: 

c语言函数调用时,实参和形参是如何传递的?什么时候要写指针型变量?求高...

形参在函数定义时表示的一种占位符,实参就是里面存有实际变量值或者常量,函数调用时,实参值会自动传递给形参变量。指针比较复杂了。是变量的地址,如果参数类型是指针类型,则必须把实参变量的地址传递过去。当然在函数内也是间接引用实参变量的。

值传递,又称单向传递,只能把实参数值传给形参 ,形参最后的结果不影响实参(形参改变大小 ,实参大小不变)。址传递,通过指针,把实参的地址给形参,形参的大小可以影响实参。

函数实参与形参之间的数据传递方式是( 值传递)传递方式,在C语言中,数据传递方式有值传递和引用传递,值传递:传值,实际是把实参的值赋值给行参,相当于copy。那么对行参的修改,不会影响实参的值 。

主要有两种:(1)值传递:在函数调用时,将实参的值复制一份传递到调用函数中,这样,如果在调用函数中修改了参数的值,也不会影响到实参的值。(2)引用传递:与(1)相反,即会影响实参的值。

函数也可以有形参和返回值,其形参也称为命令行参数,由操作系统在启动程序时初始化,其返回值传递给操作系统。

建立中间变量(形参),把实参值赋值给中间变量,当被调函数返回值时,系统释放掉中间变量。在程序中通过对函数的调用来执行函数体,其过程与其它语言的子程序调用相似。对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。

C++指针、数组、引用、变量作函数参数的问题

1、要改变一个变量的值,到主调函数中也生效,那就必须穿地址(传指针), 否则不行。不过 并不是指针类型就可以,而必须是要修改类型的指针。比如 你要修改int 就要传int 要修改 char * 就要传char 然后 在函数中改变参数指向空间的值,也就是修改*p的值。

2、在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。

3、原因:sum的初始化为0,也就是令sum等于0,防止下面使用的时候,sum是一个不可预料的值。常量其值不可改变,符号常量名通常用大写。变量是以某标识符为名字,其值可以改变的量。

4、*py就是x,这里相当于x=10;指针变量作为函数的参数时,子函数可以通过指针引用实参地址中的数据,达到修改实参地址中的数据。

5、下例中的Add),在其参数列表中使用该函数指针类型,同时需要定义另一函数(下例中的fpAdd,注意该函数形式要和fpFunt一致,本例子中是返回一个整数,两个整型参数)作为实参用。

c语言的传值与传指针的问题

c语言中指针即地址,地址的传值可以引起参数的变化。比如:&x, &y是取这两个变量的地址,他们的作用空间在main函数里。然后函数调用把这两个变量的地址传递到函数myadd中,在函数中的*a和*b分别是引用地址指向的变量值,等于是取到了x,y本身的值。在myadd中直接操作*a可以改变x的值。

指针传递、引用传递指的就是调用函数时传递的是指针、引用。 与之对应的还有传值方式。这种方式只是传递了变量的一个副本。也就是说只传了一个值而已,并不是这个变量,所以就无法对这个变量更改了。而传递指针或者引用就不一样了。

C语言中,函数参数只能传值。与传值对应的是传引用,C语言不支持函数参数传引用,C++语言才支持。C++传引用函数:void foo(int& a) { a = 3; } 假如a = 2,执行foo(a)后,a = 3。

C语言中指针变量作为函数参数和一般变量作为函数参数的区别

1、指针变量是变量的一种,指针变量的值是地址(也是整数),普通变量的值是整数、实数或者其他类型。指针变量的主要作用是修改其他函数的局部变量和访问数组。指针变量需要额外的空间存放地址,由于指针变量是间接访问所指对象,所以比起直接用普通变量名字访问所指对象而言,速度稍慢。

2、变量作为参数,这是单向值传递。即将数据传给被调函数后,与调用函数就不相关了,必须通过函数值返回操作结果。如有函数声明:void swap(int a,int b); //功能是交换a,b值,但事实上对调用函数没有影响,因为swap函数的局部变量a,b在该函数执行完释放掉了,其值也就丢失了。

3、传递参数时:对于指针,&p传递的是指针的地址 p传递的是指针所指的变量的地址,也就是变量的地址。int *p 和 int p有什么区别 int p和int *p在为函数传参时,对于int p,只传递它的副本,在函数内部改变p的值不能改变 p在函数外面的值。

C语言使用数组指针参数传递

a是指针数组,元素是char指针 ,数组传递的时候编译器只会传递数组地址,也就是a的地址,是指针数组的地址。进入函数时,复制了份指针数组的地址,而不是数组本身。

不过 并不是指针类型就可以,而必须是要修改类型的指针。比如 你要修改int 就要传int 要修改 char * 就要传char 然后 在函数中改变参数指向空间的值,也就是修改*p的值。

传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。void func(int array[10])void func(int array[])void func(int *array)所以以上三种函数声明完全等同。实际情况是,数组做参数,完全无法按值传递。这是由C/C++函数的实现机制决定的。

c语言中,函数的形参什么时候必须是指针

当需要通过地址访问时,需声明为指针。例如,需要实现地址传递的函数形参要声明为指针。

形参在函数定义时表示的一种占位符,实参就是里面存有实际变量值或者常量,函数调用时,实参值会自动传递给形参变量。指针比较复杂了。是变量的地址,如果参数类型是指针类型,则必须把实参变量的地址传递过去。当然在函数内也是间接引用实参变量的。

标准 C 中是没有引用形参的,只能使用指针形参。C++ 引入指针形参是为了降低指针灵活性带来的风险,指针形参不仅可以将数据的引用传入函数,还可以在函数内改变这个指针,也就是说在函数内部可以改变调用域的变量(而不仅仅是对象)。

什么时候都可以用指针,因为用指针的效率比用变量高。当一个函数要返回1个以上的运算结果时,就必须用指针,因为一个函数只能返回一个值,更多的得用指针“带回”。操作数组时,用指针不仅方便得多而且代码时效很高。操作文件时,不用指针寸步难行。

因为指针通过地址传递参数,如果不用指针传送速度慢。

(责任编辑:IT教学网)

更多

相关MYSQL文章

推荐MYSQL文章