预测以下程序的输出。
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