c语言函数调用地址传递 c语言函数值传递与地址传递

C语言传地址调用1、值传递:不管怎么传,原来的实参的值都不会改变 。
地址传递,原来的实参的值可能被改变 。
打个比方:
值传递就好象你告诉别人你的帐户里有多少钱帐户里的钱不会改变 。
地址传递就好象你告诉别人你的帐户密码帐户里面的钱可以被改变 。
2、例如:
#includestdio.h
point(char *pt)
main()
{char b[4]={'m','n','o','p'},*pt=b;
point(pt);
printf("%c\n",*pt);
}
point(char *p)
{p+=3;
*p='F';}//加上这一句就变了
C语言的函数调用中怎样判断是地址传递还是值传递?int,char,float,结构体,枚举,联合均为值传递;
数组名,指针,引用均为地址传递;
比如
func(int,char,float,struct S)值传递
func(int *,int a[],int a)地址传递
C语言 函数地址传递按照规定做,就行了 。
不用问为什么 。
规则 , 都是人为规定的 。
有时 , 就是胡乱定的 , 以后,再改版升级,就变了 。
用不着深究 。
C语言函数调用中怎么判断是地址传递还是值传递根据参数类型以及函数实现的功能综合判断 。
注意不能单单看是否为指针 。
要传递类型为A的值 , 如果参数类型是A* , 那么为传地址,反之,如果参数类型是A,那么是传值 。
比如,要传递int型参数:
1 传值:
void func(int a);
2 传地址:
void func(int *a);
而传递char *型参数 。
1 传值:
void func(char *a);
2 传地址:
void func(char **a);
同样是char *类型的参数,有可能是传值 , 也有可能是传地址 。具体取决于函数实现功能 。
C语言关于函数之间地址值的传递问题#include stdio.h
void swap(int*,int*);
void main()
{
int x=30,y=20;
printf("(1)x=%d y=%d\n",x,y);
swap(x,y);
printf("(4)x=%d y=%d\n",x,y);
}
void swap(int*a,int*b)
{
int t;
printf("(2)a=%d b=%d\n",*a,*b);
t=*a;*a=*b;*b=t;
printf("(3)a=%d b=%d\n",*a,*b);
}
c语言函数调用实参到形参传递的是值,那地址是怎么传递的?首先,是实参调用形参.你说的地址传递其实和值传递差不多.比如max( a, b );这是实参int max( int *p, int *p2 )这是形参.比如实参,a和b都是取a和b的地址,又因为max()函数的形参是*p和*p2( *p和*p2被声明为整型的指针 ),因为指针是存地址的,所以把a和b的地址赋给p和p2.下面是一个把a和b的值交换的程序./*============================程序名:max.c目的:用地址交换两个变量的值.============================*/#include stdio.hint max( int *p, int *p2 ); /* 声明函数 */ int main( void ){int a, b;scanf( "%d", a ); /* 输入两个变量的值 */scanf( "%d", b );printf( "a = %d, b = %d\n", a, b );return 0;}int max( int *p, int *p2 ){int temp; /* 定义一个临时变量,为的只是交换 */temp = *p;*p = *p2;*p2 = temp; /* 己交换 */}
【c语言函数调用地址传递 c语言函数值传递与地址传递】关于c语言函数调用地址传递和c语言函数值传递与地址传递的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。