1.指针
(指针是一个变量,其存储的是值的地址)
(对常规变量,值是指定量,地址是派生量,应用地址运算符(&),可以获得地址)
(对于处理存储数据,地址是指定量,值是派生量,指针用于存储的地址,指针名是地址)
(*应用于指针名,得到该地址处存储的值)
例:man是指针,///&man是一个地址,*man就是存储在该地址的值
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
int num = 6;
int* poll; // *两边空格可选
poll = #
cout << "num的地址" << poll <<endl;
cout << "num的值" << *poll <<endl;
*poll = *poll + 1;
cout << "加1后poll的值" << *poll << endl;
cout << num <<endl;
return 0;
}
可以在声明语句中初始化指针,被初始化的是指针,而不是它所指向的值
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
int num = 6;
int* poll = & num; ///将poll设置为&num
cout << "num的地址" << poll <<endl;
cout << "num的值" << *poll <<endl;
*poll = *poll + 1;
cout << "加1后poll的值" << *poll << endl;
cout << num <<endl;
return 0;
}
1.1new(为数据分配内存,并返回该内存的地址)
1.2delete(释放内存)
int* ps = &pd;
.....
delete ps;
1.3用new创建动态数组// 使用delete删除
int* pd = new int [10]; //pd指向10个int值内存块中第一个元素的地址 *pd第一个元素的值
.....
delete [] pd;
或
short* pd = new short;
...
delete pd;
通用格式
type_name* pointer_name = new type_name [num_elements]
将指针当做数组名使用即可
//第一个元素
psome[0]
//第二个元素
psome[1]
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
int* pd = new int[3];
pd[0] = 1;
pd[1] = 2;
pd[2] = 3;
cout << "动态数组第一个值的地址" << pd << endl;
cout << "动态数组第一个值" << pd[0] <<endl;
pd = pd + 1; //pd指向数组第二个值
cout << "动态数组第一个值" << pd[0] <<endl
;
pd = pd - 1; //pd 先加1,再减1. 给delete 提供正确的地址
delete [] pd;
return 0;
}
2.数组指针
指针和数组关系密切,如果ar是数组名,则表达式ar[i]解释为*(ar+i)
double wages[3] = {1.0,2.2,3.0};
double* pd = wages; //相当于 double* pd = &wages[0];
*pd = 1;
wanges[0] 相当于 *pd
wanges[1] 相当于 *(pd+1)
3.指针和字符串
char 数组名,char 指针,以及用引号括起的字符串常量都被解释为 字符串第一个字符的地址
(如果给cout 提供一个指针,将打印地址)
(指针为char* ,则cout显示指向的字符串)
4.动态结构
struct things
{
int good;
int bad;
}
int* pt =&things;
pt->good = 1; //创建动态结构时,不能将成员运算符句点用于结构名
// 箭头成员运算符 -> 用于指向节后的指针
(结构标识符是结构名,则使用句点运算符;如果标识符是指向结构的指针,则使用箭头运算符)
(如果ps是指针,*ps就是被指向的值--结构本身, (*ps).price 也可以访问结构成员)
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
struct infor
{
string name;
int year;
float weight;
};
int main()
{
infor * ps = new infor;
cout << "请输入姓名" << endl;;
cin >> ps->name;
cout << "请输入年龄"<<endl;
cin >> ps->year;
cout << "请输入体重"<<endl;
cin >> ps->weight;
cout << (*ps).name << (*ps).year << ps->weight << endl;
delete ps;
5.模板类(vector和array)
vector 替代 new创建动态数组
vector<typename> vt(n_elem) //创建名为vt的vector对象,存储n_elem个类型为typeName的元素
array<typeName, n_elem> arr //创建名为arr的array对象,包含n_elem个类型为typeName的元素