C++ 指针
C++指针学习起来容易而有趣。某些C++任务通过指针更容易完成,而其他的C++任务(如动态内存分配)则无法在没有指针的情况下完成。
正如你所知,每个变量都是一个内存位置,每个内存位置都有其定义的地址,可以使用和号(&)运算符来访问地址。考虑以下代码,它将打印定义的变量的地址。
#include <iostream>
using namespace std;
int main () {
int var1;
char var2[10];
cout << "Address of var1 variable: ";
cout << &var1 << endl;
cout << "Address of var2 variable: ";
cout << &var2 << endl;
return 0;
}
当上述代码被编译并执行时,它产生以下结果 –
Address of var1 variable: 0xbfebd5c0
Address of var2 variable: 0xbfebd5b6
指针是什么
指针是一个其值为另一个变量地址的变量。与任何变量或常量一样,在使用前必须声明指针。指针变量声明的一般形式为-
type *var-name;
在这里, type 是指针的基本类型;它必须是一个有效的C++类型, var-name 是指针变量的名称。用来声明一个指针的星号和用于乘法的星号是一样的。然而,在这个语句中,星号被用来将一个变量指定为指针。以下是有效的指针声明:
int *ip; // pointer to an integer
double *dp; // pointer to a double
float *fp; // pointer to a float
char *ch // pointer to character
所有指针的实际数据类型,无论是整数、浮点数、字符或其他,都是相同的,都是表示内存地址的长十六进制数。不同数据类型的指针之间的唯一区别是指针指向的变量或常量的数据类型。
在C++中使用指针
有几个重要的操作,我们经常使用指针来进行。
(a)我们定义一个指针变量。
(b)将变量的地址分配给指针。
(c)最后通过使用一元运算符来访问指针变量中可用地址中的值。一元运算符返回其操作数指定的地址处的变量的值。以下示例使用这些操作:
#include <iostream>
using namespace std;
int main () {
int var = 20; // actual variable declaration.
int *ip; // pointer variable
ip = &var; // store address of var in pointer variable
cout << "Value of var variable: ";
cout << var << endl;
// print the address stored in ip pointer variable
cout << "Address stored in ip variable: ";
cout << ip << endl;
// access the value at the address available in pointer
cout << "Value of *ip variable: ";
cout << *ip << endl;
return 0;
}
当上面的代码被编译和执行时,它会产生以下结果:
大致如下-
Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20
C++中的指针
指针在C++编程中具有许多简单但重要的概念。以下是几个对C++程序员来说应该清楚的重要指针概念:
序号 | 概念与描述 |
---|---|
1 | 空指针 C++支持空指针,它是一个值为零的常量,在几个标准库中定义。 |
2 | 指针算术 可以对指针使用四个算术运算符:++,–,+,- |
3 | 指针与数组 指针和数组之间存在密切的关系。 |
4 | 指针数组 可以定义数组来保存多个指针。 |
5 | 指向指针的指针 C++允许你使用指针指向指针,以此类推。 |
6 | 将指针传递给函数 引用传递或地址传递都可以使调用函数中的参数通过被调用函数进行修改。 |
7 | 从函数返回指针 C++允许函数返回指向局部变量、静态变量和动态分配内存的指针。 |