那为什么要"*y"这个Y前面要加个"*"星号呢?

#include <stdio.h>
int sum(int x,int *y)
{
x = 5;
*y = 6;
}
void main()
{
int a,b,c = 0;
a = 4;
b = 8;
c = sum(a,&b);
printf("%d%d\n",ab);
} 请帮我详细分析下,顺便告诉我“*y”和“&b”这两个是什么意思,为什么要这样写?我是个菜鸟,望高手们帮忙!

largeQ
浏览 306回答 3
3回答

慕虎7371278

首先你程序的语法上就有问题。int sum(int x,int *y){x = 5;*y = 6;} 非void型函数需要返回一个值,在这需要返回一个int型的值。printf("%d%d\n",ab); 还有这句ab需要用逗号隔开,写成a,b;int sum(int x,int *y)这里的*y表示y是一个指向int型变量的指针型变量,此时的y就是一个指针,指向一个内存地址{x = 5;*y = 6;}这里的*y表示的是y这个指针指向的内存地址上存储的值,*y=6,也就是将y所指向的单元上的值赋为6&在这表示一个取地址的符号,因为函数定义中第二个参数是一个指针变量,而b是一个int型变量,所以需要对b取地址,&b表示b的内存单元的地址。最后进行一个分析。int sum(int x,int *y){x = 5;*y = 6;return 0;}这个函数缺少一个返回值,有错误。我暂时稍微修改一下函数内容,加上最后一句return 0;这个函数函数名为sum,int sum表示返回值是一个int型的值,int x,int *y表示两个参数一个是int型,一个是指向int型变量的指针。函数的作用时是将传进来的参数x的值赋为5,y所指向的内存单元上的值赋为6,在返回一个0值。void main(){int a,b,c = 0;a = 4;b = 8;c = sum(a,&b);printf("%d%d\n",a,b);}int a,b,c=0;这句表示声明三个变量a,b,c,并将c的值赋为0;a = 4; b = 8;将a的值赋为4,b赋为8;c=sum(a,&b);表示执行sum函数,由于sum函数返回一个值,所以c的值是sum函数所return的这个值,在这里也就是我自己帮你添加的一个0;而a在sum内表面上是被赋值为5,但是由于传入函数的形参不是指针的时候,他传入的实际是a的一个副本,并不是a本身,所以对a的修改只是修改了a的一个副本,对a 并没有影响由于传入的&b是指针,函数操作修改它所指向的内存单元上的数据为6,这个操作并不是在它的副本上进行的,所以b也就被修改为了6所以最后输出应该是46

ABOUTYOU

定义一个函数,函数名为sum,函数有两个参数x和y,都是int(整数型)函数的返回值是int(整数型)

慕仙森

#include <stdio.h> //包含头文件int sum(int x,int *y) //定义一个函数。第一个参数是int变量。注意第二个参数,它是一个指针。也就是一个地址{x = 5;*y = 6; //将传进来这个指针/地址对应的值赋值为6}void main() //主函数{int a,b,c = 0;a = 4;b = 8;c = sum(a,&b); //这里调用上面那个函数,第一个参数传进入的是4,第二个参数&的意思是取地址的意思。连起来就是取得b这个变量的地址。然后传进sun函数,最后sun函数返回一个结果传给Cprintf("%d%d\n",ab);//打印出来,这里你应该是少写了个逗号在ab之间}补充:int c=&p的意思是取得p这个变量的地址放进C变量。此时C保存的是P的地址而*c的结果就是p这个变量
打开App,查看更多内容
随时随地看视频慕课网APP