C语言函数参数为指针(C语言问题 函数中形参若为指针,则调用时对应位置上的实参不能是())

2024-05-31 21:50:06 :28

c语言函数参数为指针(C语言问题 函数中形参若为指针,则调用时对应位置上的实参不能是())

这篇文章给大家聊聊关于c语言函数参数为指针,以及C语言问题 函数中形参若为指针,则调用时对应位置上的实参不能是()对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

C语言问题 函数中形参若为指针,则调用时对应位置上的实参不能是()

不能是简单变量,因为它不是地址。语法规则而已。形参若为指针,实参必须是指针变量,或数组名,或简单变量的地址。数组名就是数组的首地址,是地址简单变量的地址是地址形参若为指针,实参是指针变量,这是一一对应,天经地义。

c语言函数的形参为指针变量时,对应的实参可以是数组名怎么理解呀

举例:void f(int *p){}int arr={1,2,3};因为函数f的形参是一个类型为int的指针变量,所以调用f时,可以将数组名arr作为实参传给形参p。即可以这样调用:f(arr);

c语言中指针作函数的参数是怎么回事有点不懂!!!

如果使用指针作为参数就是地址传递,否则只是值传递。你可以看下下面的这个函数:void modify(int a){a++;}void main(){int a=5;modify(a);printf("%d",a);}这个程序的答案还是5。为什么?因为当调用modify(a)时,在执行modify函数时,是另外开辟了一个内存空间,将main中a的值复制过来,modify函数中所有的操作都是相对于这个新开辟的内存空间而言的,对原来的a没有任何改变。现在就来说说指针,如果用指针传参的话那就完全不一样了,指针(pointer),说白了即是指向变量内存地址。同样上面的例子:void modify(int * a){(*a)++;}void main(){int a=5;modify(&a);printf("%d",a);}这个答案当然是6因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个新开辟的内存空间,只是这个内存空间初始值和a一样。你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return 如果不是用指针的话,就要再子函数的未尾加上一条return x;把这个数返回当返回值。

C语言指针变量的赋值和做函数的参数

1、指针变量的赋值,分为定义时赋值(初始化)和单独赋值,如:int x ;int * px=&x ; //定义时赋值,也称初始化,注意这里的*是跟随int的,即变量px是int *类型变量! 实际上的赋值语句是px=&x ;int * py ;py=&x ; //单独赋值,将py指向x*py=10 ; //这里的*,是引用指针中的数据操作符,*跟随的变量必须是指针类型变量,否则会出错! *py就是x,这里相当于x=10;2、指针变量作为函数的参数时,子函数可以通过指针引用实参地址中的数据,达到修改实参地址中的数据。如:#include 《stdio.h》void func( int a, int b, int *pmax ){ if ( a》b ) *pmax=a; else *pmax=b ;}void main(){ int a=2,b=3,max=0; func(a,b,&max ); //这里将变量max的地址传递到子函数,子函数中通过该地址,可以修改max的值,达到子函数结束后,max能带回运算结果的效果。 printf("max=%d\n", max );}

C语言,使用指针作为函数参数,写一求数组中最大值和最小指的函数

#include<stdio.h>

voidhanshu(int*arry,intsize,int*m,int*n)

*m=arry[0];

*n=arry[1];

for(inti=0;i<size;i++)

if(arry[i]>*m)

*m=arry[i];

if(arry[i]<*n)

*n=arry[i];

intmain(intargc,constchar*argv[]){。

inta[]={1,5,6,2,3,8,9,7,4,5};//定义一个十个数据的数组

intmax;//存放最大值

intmin;//存放最小值

hanshu(a,10,&max,&min);//函数传送数组,并将最大值,最小值的地址传送

printf("Themaxnumberis%d\n",max);

printf("Theminnumberis%d\n",min);

return0;

扩展资料:

include用法:

#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。

插入头文件的内容

#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:

1、#include《文件名》

2、#include"文件名"

c语言中用一个函数指针作为另一个函数的参数,该怎么解决

首先需要声明函数指针的类型(下例子中的typedef int (*fpFunt)(int a,int b),再定义某个函数(下例中的Add),在其参数列表中使用该函数指针类型,同时需要定义另一函数(下例中的fpAdd,注意该函数形式要和fpFunt一致,本例子中是返回一个整数,两个整型参数)作为实参用。这里在手机上使用易历知食软件内的微C程序设计来编程,举个两个数相加的例子,代码如下图:

调用后运行结果如下图:

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

情况1 需要读入的数据是比较大的数据,使用指针作为参数可以节省堆栈比如 定义1个结构体typedef struct test{char buffer1;char buffer2;//后面还有一大堆成员}test_ts;void Func1(test_ts t1){//函数体是对t1成员进行Read处理}void Func2(test_ts *t1){//函数体是对t1成员进行Read处理}上面2个函数功能其实一样,但函数Func2参数只是一个指针占的空间就4 Byte,Func1参数是一个结构体,占的空间就看成员多少,但例子的使用的堆栈最少20000Byte了。情况2 需要对数据进行改写一般对应的数据是数组或结构体数据。比如memset函数函数,用于把传入指针的数据写入对应的数据。具体函数体内容不贴了,baidu查下吧。例如还是这个结构体test_tstest_ts t2;如果需要将t2的每个成员初始化成0,可以把每个成员挨个赋值成0。但如果用下面这样代码memset(&t2,0,sizeof(t2));一行搞定

C语言用指针作函数参数

选D因为第一个参数是地址传递,fun(&b,a);中传入a字符。*c=*c+1将c的值变为b字符。主函数的值改变。第二个参数是值传递,所以在函数中d的值为B字符。但是并不影响主函数的值,所以主函数输出a的值是A。b的值是b。

在c语言中,指针作为函数参数,形参只能传递值,而不能传递地址,是怎么回事

C语言中,函数参数只能传值。与传值对应的是传引用,C语言不支持函数参数传引用,C++语言才支持。C++传引用函数:void foo(int& a) { a = 3; }假如a = 2,执行foo(a)后,a = 3。---C语言可以模拟传引用,方法是通过指针来实现:void foo2(int* ap) { *ap = 3; }假如a = 2,执行foo2(&a)后,a = 3foo2(&a)调用本质上仍然是传值,只不过传递的是指针,指针即是地址,地址本质上是一个无符号整数。如果:void foo3(int b) { b = 3; }假如a = 2,执行foo3(a)后,a = 2。这是因为foo3(a)调用过程中,a值传给形参b,修改b的值与实参a无关。注意到,foo3(a)与上述foo(a)传引用的调用是形式一样的。既然C语言通过指针可以实现传引用调用,为什么C++还要引入引用这个特性呢?这是因为C++引入的很多新特性需借助引用来实现,比如,拷贝构造函数等等。

C语言函数里的参数是指针的问题

函数定义和函数调用是两个概念,函数定义 为f(int *arr),表示参数是一个整型指针,因此使用该函数时要传递一个地址,如变量int a=0; 调用函数f传递a的地址时需要写为f(&a);而对于数组来说,如int b, b本身就是数组首元素的地址,因此调用函数f传递数组首地址需要写为f(b)。

关于c语言函数参数为指针,C语言问题 函数中形参若为指针,则调用时对应位置上的实参不能是()的介绍到此结束,希望对大家有所帮助。

c语言函数参数为指针(C语言问题 函数中形参若为指针,则调用时对应位置上的实参不能是())

本文编辑:admin
c语言函数参数为指针 ,不 ,位
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.