有以下程序
#include <stdio.h> #include <stdlib.h> void fun(int *p1, int *p2, int *s) { s = (int *)malloc(sizeof(int)); *s = *p1 + *(p2++); } int main() { int a[2] = {1, 2}, b[2] = {10, 20}, *s = a; fun(a, b, s); printf("%d \n", *s); }
程序运行后的输出结果是?
42
41
1
0
这道题我觉得关键在于s指针所在物理内存改变。fun ( int *pl,int *p2,int *s )中, 本来s和p是指向同一个物理地址的,实参q和形参s共用一段内存空间,如果没有s重新申请新的内存的话, 对s的操作就是对p的操作。由于s所在物理地址改变,因此s和p两个不相关,因此*p还是1. 如果fun ( int *pl,int *p2,int *s ) { *s=*pl + *p2; } 这样的话 *p就是41.
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题