为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
largeQ 2022-07-14 18:11:55
#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”这两个是什么意思,为什么要这样写?我是个菜鸟,望高手们帮忙!
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

首先你程序的语法上就有问题。
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


查看完整回答
反对 回复 2022-07-18
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

定义一个函数,函数名为
sum
,函数有两个参数
x

y,都是int
(整数型)

函数的返回值是
int
(整数型)


查看完整回答
反对 回复 2022-07-18
?
慕仙森

TA贡献1827条经验 获得超7个赞

#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函数返回一个结果传给C
printf("%d%d\n",ab);//打印出来,这里你应该是少写了个逗号在ab之间
}

补充:
int c=&p的意思是取得p这个变量的地址放进C变量。此时C保存的是P的地址
而*c的结果就是p这个变量


查看完整回答
反对 回复 2022-07-18
  • 3 回答
  • 0 关注
  • 301 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信