检查点
什么是指针?
了解C++中的指针。
...
1.
Suppose we have a pointer variable that points to a char variable. What would be the size of this pointer? This pointer later on starts pointing to an int variable. What would be its size now?
0/500
1int var; 2int *var_pointer;
1int *var_pointer = nullptr;
1int var = 10; // 一个变量 2int *ptr = &var; // 指针,存储变量 var 的地址
1int value = *ptr;
1# include <iostream> 2using namespace std; 3 4int main() 5{ 6 int var = 10; 7 int *ptr = &var; 8 int value = *ptr; 9 cout << value; 10 return 0; 11}
...
指针解引用
1int *ptr = new int; // 动态分配一个整数的内存空间 2*ptr = 5; 3delete ptr; 4ptr = nullptr; // 防止悬空指针
...
表格对比
| 引用(Reference) | 指针(Pointer) |
|---|---|
| 引用是另一个变量的别名。 | 指针用于存储另一个变量的内存地址。 |
| 使用与号(&)声明。 | 使用星号(*)声明。 |
| 必须在声明时初始化,不能为 null 或未初始化,必须始终绑定到一个已存在的变量。 | 可以使用取址符(&)初始化为某个变量的地址,也可以设置为 nullptr 或 NULL,表示不指向任何变量。 |
| 一旦引用绑定到某个变量,就不能再修改为引用其他变量。 | 指针在其生命周期内可以被重新赋值,指向不同的变量或内存位置。 |
1# include <iostream> 2using namespace std; 3 4void func(int * ptr) 5{ 6 if(ptr) 7 cout << "指针有效,解引用结果:" << *ptr << endl; 8 else 9 cout << "指针为空。" << endl; 10} 11 12int main() 13{ 14 int * ptr = nullptr; 15 func(ptr); 16}
1#include <iostream> 2using namespace std; 3 4void referenceUsingReference(int &num) { 5 num = num + 1; 6} 7 8void referenceUsingPointers(int *num) { 9 *num = *num + 1; 10} 11 12int UsingValue(int num) { 13 num = num + 1; 14 return num; 15} 16 17int main() { 18 int num = 6; 19 num = UsingValue(num); 20 cout << "number is:" << num << endl; 21 referenceUsingReference(num); 22 cout << "number is:" << num << endl; 23 referenceUsingPointers(&num); 24 cout << "number is:" << num << endl; 25 return 0; 26}
1#include <iostream> 2using namespace std; 3 4void swapPointers(int* a, int* b) { 5 // 在此处编写你的代码 6} 7 8int main() { 9 // 在此处编写你的代码 10 return 0; 11}
在主函数中:
- 我们创建两个
int类型的变量x和y,并赋予初始值。 - 然后打印它们交换前的值。
- 调用
swapPointers(int *a, int *b)函数,该函数接受两个整型指针作为参数,分别表示要交换的两个整数的内存地址。 - 在函数内部,我们定义一个临时变量
temp,用于存储第一个指针a所指向的值。 - 接着将
a所指向的值更新为b所指向的值,最后将b所指向的值更新为temp中保存的原始值。 - 这样就实现了原始整型变量值的交换。
- 最后打印
x和y的值,输出结果显示它们的值已成功互换。
Quiz
单选题
在指针的上下文中,表达式 int *ptr = nullptr; 表示什么?
1 / 3