指针基本概念、指针运算、引用
指针
指针的基本概念:
指针是一个变量,其值为另一个变量的内存地址。通过指针可以间接访问该变量。
指针的声明和使用:
#include <iostream>
int main() {
int a = 10;
int* p = &a; // p 是一个指向 int 型变量的指针,它存储了 a 的地址
std::cout << "a 的值: " << a << std::endl;
std::cout << "a 的地址: " << &a << std::endl;
std::cout << "p 的值 (即 a 的地址): " << p << std::endl;
std::cout << "*p 的值 (即 a 的值): " << *p << std::endl;
return 0;
}
指针运算:
指针可以进行算术运算,例如加减操作,但这些运算通常用于数组的遍历。
#include <iostream>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int* p = arr; // 指向数组的首元素
std::cout << "数组元素: ";
for (int i = 0; i < 5; ++i) {
std::cout << *(p + i) << " "; // 通过指针遍历数组
}
return 0;
}
引用
引用的基本概念:
引用是变量的别名,必须在声明时初始化,并且初始化后不能改变引用的对象。
引用的声明和使用:
#include <iostream>
int main() {
int a = 10;
int& ref = a; // ref 是 a 的引用
std::cout << "a 的值: " << a << std::endl;
std::cout << "ref 的值: " << ref << std::endl;
ref = 20; // 改变 ref 的值也会改变 a 的值
std::cout << "修改后 a 的值: " << a << std::endl;
return 0;
}
引用与指针的区别:
初始化:指针可以在声明后再赋值,而引用必须在声明时初始化。
修改引用的对象:指针可以改变指向不同的对象,而引用在初始化后不能改变。
空值:指针可以为空(NULL),而引用必须引用有效的对象。
引用在函数中的使用:
引用通常用于函数参数和返回值,以避免拷贝大数据结构,提高效率。
#include <iostream>
void increment(int& n) { // 使用引用作为参数
n++;
}
int main() {
int a = 10;
increment(a); // a 被传递给函数并直接修改
std::cout << "a 的值: " << a << std::endl;
return 0;
}
返回引用:
函数可以返回引用,这样可以直接操作调用函数的对象。
#include <iostream>
int& getElement(int* arr, int index) {
return arr[index]; // 返回数组元素的引用
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
getElement(arr, 2) = 10; // 修改数组中的第三个元素
std::cout << "数组元素: ";
for (int i = 0; i < 5; ++i) {
std::cout << arr[i] << " ";
}
return 0;
}