C语言指针简单问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 07:49:24
#include <stdio.h>
int* fact () //该函数类型为一个整数类型的指针(地址)
{
static int i=0,j; //如果去掉static限定预测并观察程序运行结果(问:运行结果是内存错误,原因?)
if (i <= 0)
printf("please input a positive number:\n");
else
{
for (j=1; i > 0; i--) //求阶乘运算
j = i *j;
printf("the pactorial = %d\n",j);
}
return (&i); //返回i的地址(返回id地址是什么意思,为什么返回j的地址不对?)
}

void main()
{
do
{
scanf("%d",fact());//将一个操作数写入i
}
while (1);
}
怎么把函数计算结果(i!)取出来在主函数中使用。
初学者,懂的麻烦解释清楚点。
int disciples(int n)
{
if (n == 1)
return(1);
else
return( 2 * disciples(n-1) + 1);
}
这是个递归函数,其中return(1)又是什么意思?

解释:
1. static int i=0,j; 前面为什么要加上static:
去掉static的话,它们是定义在函数的栈中,函数返回后,就会消失, &i的地址是一个随机值,有可能是代码段的地址,所以会出现内存错误。声明成static的变量会放在程序的静态数据区,进程范围内可访问,而且static变量的值是上次调用后的值。

2. 将
void main()
{
do
{
scanf("%d",fact());//将一个操作数写入i
}
while (1);
}

改成

void main()
{
int k;
do
{
scanf("%d",&k);//读取操作数
fact(k);
}
while (1);
}
这个需要将 fact()变成 fact(int data),在fact内部将 i = data

3.
int disciples(int n)
{
if (n == 1)
return(1);
else
return( 2 * disciples(n-1) + 1);
}
这是个递归函数,其中return(1)又是什么意思?
return (1)表示 当 disciples(n-1)中的 n-1为1时,则 disciples返回1

出这个题的人是非常的变态。
以下是正确的引用代码。其中,main中的 nResult就是函数的运行结果
# include <stdio.h>
int* fact (int *nResult) //该函数类型为一个整数类型的指针(地址)
{
static int i=0,j; //如果