c程序的一个问题,我初学C语言,不太懂

[复制链接]
查看11 | 回复4 | 2011-2-21 18:56:50 | 显示全部楼层 |阅读模式
#include
main()
{
int fun(int *,int);
int j=4,m=1,k;
k=fun(&j,m);
printf("the first k:%d\n",k);
k=fun(&j,m);
printf("the second k:%d\n",k);
}
int fun(int *x,int y)
{
static int k=2;
k+=*x+1;
*x=k-y;
return k;
}
请问一下k=fun(&j,m)中的&j代入int fun(int *x,int y)这个函数的时候&j代入的是j的值4,而代入的不是j的地址
不知道高手听懂我的意思了没有,才初学C语言,呵呵

回复

使用道具 举报

千问 | 2011-2-21 18:56:50 | 显示全部楼层
int fun(int *x,int y)可以这样理解int fun((int *)x,int y)(int*)这是一个指针类型int *p;与int* p;效果是一样的,因为不管怎样定义都不会产生岐义。但是我们理解的时候,应该把(int*)看成是一个类型,这样更好理解不过编译器都是以int *p;的形式来定义的 &j,是指取j的地址值。对于c语言的函数来说,参数都是传值的。int fun(int *x,int y)//int *x 也就是说传一个指针类型的数据过去。调用函数时,&j被作为函数的参数值传递。那么x=&j;*x等于*&j;//也就是j传入的是&j,也就是j的地址值。并不是j本身的值我
回复

使用道具 举报

千问 | 2011-2-21 18:56:50 | 显示全部楼层
第一个调用,fun(&j,m),传入j的地址和1返回k , 这时,k==7,*x==j==6打印 7第二次调用,fun(&j,m),传入j的地址和1返回k, 这时,由于存在static,k不会执行k=2所以k=14 ,*x==j==13;打印14
回复

使用道具 举报

千问 | 2011-2-21 18:56:50 | 显示全部楼层
没有明白你的问题,这段代码没有岐义啊?k=fun(&j,m)也符合函数的定义啊
回复

使用道具 举报

千问 | 2011-2-21 18:56:50 | 显示全部楼层
是j的地址。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行