c语言指针函数形参,c 函数指针参数

关于C语言结构体指针做函数形参的问题

*s表示变量m本身,对*s的赋值就是对m赋值,所以*s=a[p]是正确的。

创新互联的客户来自各行各业,为了共同目标,我们在工作上密切配合,从创业型小企业到企事业单位,感谢他们对我们的要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。专业领域包括成都网站建设、成都网站制作、电商网站开发、微信营销、系统平台开发。

请注意,函数fun中的s变量是一个地址,只对该地址进行重新赋值,并不对其所指向的变量m造成影响。所以s=a[p]不改变main函数中m变量的值。

如果把*s=a[p]改为s=a[p],输出会是乱码。这具有很大的迷惑性,使人以为地址的赋值过程出现了问题。实际上,若把m改为全局变量(全局变量中字符串默认为空,int变量默认为0):

#includestdio.h

#includestring.h

#define N 10

typedef struct ss

{

char num[10];

int s;

}STU;

void fun(STU a[],STU *s)

{

int t,p=0;

t=a[0].s;

for(int i=1;iN;i++)

{

if(ta[i].s)

{

t=a[i].s;

p=i;

}

}

s=a[p];     //这里是错误的语句

}

STU m;

void main()

{

STU a[N]={

{"A01",81},{"A02",81},{"A03",81},{"A04",81},{"A05",81},

{"A06",81},{"A07",81},{"A08",61},{"A09",81},{"A010",81}

};

printf("the original data is :\n");

for(int i=0;iN;i++)

{

printf("NO=%s MARK=%d\n",a[i].num,a[i].s);

}

fun(a,m);

printf("the lowest is %s  who's score is %d\n",m.num,m.s);

}

输出的将会是the lowest is   who's score is 0

这说明变量m的值并未改变过。

事实上,若非要使用符号,正确的方法是使用“引用”:

#includestdio.h

#includestring.h

#define N 10

typedef struct ss

{

char num[10];

int s;

}STU;

void fun(STU a[],STU s)

{

int t,p=0;

t=a[0].s;

for(int i=1;iN;i++)

{

if(ta[i].s)

{

t=a[i].s;

p=i;

}

}

s=a[p];

}

void main()

{

STU a[N]={

{"A01",81},{"A02",81},{"A03",81},{"A04",81},{"A05",81},

{"A06",81},{"A07",81},{"A08",61},{"A09",81},{"A010",81}

},m;

printf("the original data is :\n");

for(int i=0;iN;i++)

{

printf("NO=%s MARK=%d\n",a[i].num,a[i].s);

}

fun(a,m);

printf("the lowest is %s  who's score is %d\n",m.num,m.s);

}

这里的意思是“引用”,你可以百度上搜索C++中符号的两个意义。

C语言中当形参是指针,实参是什么?当实参是指针,形参是什么?为什么?

第一个问题:

形参是指针,实参就应该是对应数据类型的地址。

例如:

swap(int *x,int *y)

{

int t ;

t = *x;

*x = *y;

*y = t;

}

int main()

{

int a = 2,b=6;

swap(a,b);

//因为swap函数的形参是int类型的指针,所以传入的实参应该是int类型变量的地址

return 0;

}

第二个问题:

当实参是指针的时候,形参应该是什么?

其实很简单,你只要把

第一问列出来 ①实参:地址 ②形参 :指针

一一对应出来 ①实参:指针 ②形参:指针的指针

因为你要在局部函数中改变实参,就需要传递它的地址,指针也是如此,把它类比为int型变量就好了。

个人理解,希望能帮到你,如有不对,欢迎指正

在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 = 3

foo2(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语言指针函数形参,c 函数指针参数
网站链接:http://scyanting.com/article/dsiiocp.html