指针与引用
指针与引用
指针;基于指针的数组访问;字符指针;指向结构体的指针;引用。
概念
指针变量存放地址,*p 解引用访问所指对象,&x 取地址。数组名在表达式中常转为指向首元素的指针,可用 *(p+i) 或 p[i] 访问。字符指针可指向字符串字面量或字符数组;结构体指针用 -> 访问成员。引用是已存在变量的别名,定义时必须绑定,不能空绑也不能重新绑定到其他对象。与 cspj.cpp.array 的区别:数组侧重下标,指针侧重地址运算与类型。CSP-J 入门级指针考察深度有限,多为判断指针赋值是否改变指向、是否解引用。
CSP-J 常考
目前语料只有 1 道:cspj-r1-2022 第 3 题,单选题给 p = &x; q = &y; p = q; 代码片段,问执行后 p/q/x/y 的关系(改的是指针指向,不是 *p 的值)。
int x = 10, y = 20;
int *p = &x, *q = &y;
p = q; // p 与 q 同指向 y,x 仍为 10
cout << x << " " << *p << endl;
int &r = x; // 引用
r = 30; // x 变为 30
易错点
p = q是地址赋值,不是把y的值写入x;要与*p = *q区分。- 未初始化的指针解引用是未定义行为,阅读题若
int *p; *p = 1;应判错或行为不确定。 - 字符指针
char *s = "hi"指向字面量,不可通过s[0]='H'修改;与字符数组char s[]="hi"不同。
运行以下代码片段的行为是( )。
int x = 101;
int y = 201;
int *p = &x;
int *q = &y;
p = q;