以下函数执行后,变量a的值会发生什么变化? void modify(int *p) { int x = 10; p = &x; } int main() { int a = 5; int *ptr = &a; modify(ptr); return 0; }
答案解析
核心考点:指针参数传递的副本特性。
解题思路分析:
1. 函数参数传递本质是值传递,指针变量作为参数时传递的是地址的副本
2. 在modify函数内修改形参p的指向(p = &x),不会影响main函数中的ptr
3. x是局部变量,函数返回后其内存空间被释放
选项分析:
A. 错误:函数内仅修改了形参指针的指向,未通过*p修改内存内容
B. 错误:ptr的指向地址不会改变,因为传递的是地址副本
C. 正确:实参ptr的指向未改变,a的值始终为5
D. 错误:程序行为是确定的,不存在未定义行为
易错点提醒:
混淆指针变量本身和指针指向内容的修改差异,注意形参指针的修改不影响实参
正确答案:C