C程序的输出|集12

预测以下程序的输出。

null

问题1

int fun( char *str1)
{
char *str2 = str1;
while (*++str1);
return (str1-str2);
}
int main()
{
char *str = "geeksforgeeks" ;
printf ( "%d" , fun(str));
getchar ();
return 0;
}


产出:13 在fun()中,指针str2被初始化为str1,str1被移动到“”处(注意 ; 在while循环之后)。所以str1将增加13(假设char占用1字节)。

问题2

void fun( int *p)
{
static int q = 10;
p = &q;
}
int main()
{
int r = 20;
int *p = &r;
fun(p);
printf ( "%d" , *p);
getchar ();
return 0;
}


产出:20 在fun()中,q是指针p的副本。因此,如果我们将q改为指向其他对象,那么p将不受影响。

问题3

void fun( int **p)
{
static int q = 10;
*p = &q;
}
int main()
{
int r = 20;
int *p = &r;
fun(&p);
printf ( "%d" , *p);
getchar ();
return 0;
}


产出10

请注意,我们正在将p的地址传递给fun()。p in fun()实际上是指向main()中p的指针,我们正在更改p in fun()的值。所以main的p变成了fun()的q点。为了更好地理解它,让我们将p in fun()重命名为p_ref,或将ptr_重命名为p

void fun( int **ptr_to_p)
{
static int q = 10;
*ptr_to_p = &q; /*Now p of main is pointing to q*/
}


此外,请注意,该程序不会导致任何问题,因为q是a 静止的 变量即使在函数返回后,静态变量仍存在于内存中。为了一个 汽车 变量,我们可能会看到一些奇怪的输出,因为在函数返回后,自动变量可能不存在于内存中。

如果您发现任何答案/解释不正确,或者您想分享有关上述主题的更多信息,请发表评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享