您的位置:首页 > 其它

关于函数的指针参数

2013-03-20 12:02 489 查看
/article/2780947.html

先做一道题目:

[c-sharp]
view plaincopyprint?

#include <stdio.h>
int f(int *p)
{
static int i = 5;
p=&i;
return 0;
}
int main(void)
{
int *p;
f(p);
printf("p = %d/n",*p);
return 0;
}
该程序的输出结果是多少?

该程序的输出结果是多少?

==============================================

有人会认为输出的是“p = 5”,其实应该是一个不确定的数。
为了弄清为什么,先看下一个例子:

[cpp]
view plaincopyprint?

#include <stdio.h>
int main(void)
{
int i=0x01;
int *p=&i;
printf("&i = %x/n",&i);   //i的地址

printf("p = %x/n",p);
printf("*p = %x/n",*p);
printf("&p = %x/n",&p);
return 0;
}

#include <stdio.h>
int main(void)
{
int i=0x01;
int *p=&i;
printf("&i = %x/n",&i);   //i的地址
printf("p = %x/n",p);
printf("*p = %x/n",*p);
printf("&p = %x/n",&p);
return 0;
}


执行结果:
&i = bfffe924
p = bfffe924
*p = 1
&p = bfffe920

解析:
指针占4Byte,存放着它所指向的数据的地址。P是一个指向int型变量i的指针,所以p表示该指针的内容,也就是i的地址;*p表示p指向的内容,就是i;&p代表指针p本身的地址。
再看第一道题,main函数里的p和f函数的参数p都是指向int型的指针,当main函数调用f函数时:f(p),传递给f函数的是main函数中的p的内容,因为p没有初始化,所以它的内容是一个不确定的地址,所以,f函数中的p指向了这个不确定地址。

怎样才能让main函数中的p指向f函数中的静态变量i呢?
将程序做如下修改即可:

[cpp]
view plaincopyprint?

#include <stdio.h>
int f(int **p)
{
static int i = 5;
*p=&i;
return 0;
}
int main(void)
{
int i=0x01;
int *p=&i;
f(&p);
printf("p = %d/n",*p);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: