C++指针详解
1、简单使用
计算机程序在存储数据时必须跟踪3种属性
1、信息存储在何处
2、存储的值是多少
3、存储的信息是什么类型
指针是一个变量,其存储的是值的地址,而不是值本身。
获取常规变量地址 使用&——地址运算符
#include <iostream>
int main()
{
using namespace std;
int donuts = 6;//声明变量
double cups = 4.5;//声明变量
cout << "donuts value = " << donuts;//打印变量值
cout << " and donuts address = " << &donuts<<endl;//打印变量地址
cout << "cups value = " << cups;//打印变量值
cout << " and cups address = " << &cups << endl;//打印变量地址
cin.get();
return 0;
}
AI 代码解读
程序输出
- 运算符被称为解除引用或间接值运算符,将其应用于指针,可以得到该地址处存储的值。
#include <iostream>
int main()
{
using namespace std;
int jone = 6;//声明变量
int * p_jone ;//声明指针变量
p_jone = &jone;//赋值指针变量
cout << "jone value = " << jone;//打印变量值
cout << " jone value = " << *p_jone << endl;//通过地址打印变量值
cout << " jone address = " << p_jone ;//打印变量地址
cout << " jone address = " << &jone << endl;//打印变量值地址
*p_jone = *p_jone + 1; //*p_jone相当于一个int变量
cout << " new jone = " << jone << endl;//通过地址改变变量值
cin.get();
return 0;
}
AI 代码解读
程序输出
其中 指针变量的声明和赋值可以在一起
int * p_jone = &jone;//声明指针变量
AI 代码解读
这句话相当于
int * p_jone ;//声明指针变量
p_jone = &jone;//赋值指针变量
AI 代码解读
2、指针声明和初始化
计算机需要跟踪指针指向的类型。指针声明时必须指定指针指向的数据类型。
注意
int* p1,p2
p1是一个指针,p2则是int变量
可以在声明语句中初始化指针。在这种情况下,被初始化的是指针,而不是指向的值。也就是说下面的语句将pt(而不是*pt)的值设置未&jone:
int jone=7;
int * pt = &jone;
AI 代码解读
一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的,适当的地址。
3 、使用new来创建动态数组
将数组的元素类型和元素数目告诉new。必须在类型名后加上方括号,其中包含元素数目。
double * p3 = new double[3];
AI 代码解读
delete时也要加方括号 ,释放整个数组。
动态数组中,p3是指向一个double(数组第一个元素)的指针。
因此* p3是第一个元素的值,但是其它元素怎么表示呢?
只需要把指针当数组名就行
也就是说第1个元素可以使用p3[0]
第2个元素可以使用p3[1]
第3个元素可以使用p3[2]
#include <iostream>
int main()
{
using namespace std;
double * p3 = new double[3];//声明动态数组 指针
p3[0] = 0.1;//指针指向赋值
p3[1] = 0.2;//指针指向赋值
p3[2] = 0.3;//指针指向赋值
p3[3] = 0.4;//指针指向赋值(多赋值了一个) 后面内存没被占用虽然只申请了前三个,但第四个也可用
cout << "p3[0]=" << p3[0] << endl;//打印第1个元素
cout << "p3[0]=" << *p3 << endl;//以指针取值打印第1个元素
cout << "p3[1]=" << p3[1] << endl;//打印第2个元素
cout << "p3[2]=" << p3[2] << endl;//打印第3个元素
p3 = p3 + 1;//指针加1,指向了第二个元素
cout << "new p3[0]=" << p3[0] << endl;//打印第2个元素
cout << "new p3[1]=" << p3[1] << endl;//打印第3个元素
cout << "new p3[2]=" << p3[2] << endl;//打印第4个元素
cin.get();
return 0;
}
AI 代码解读
程序输出