基于范围的for循环
int main()
{
int array[3] = {1,2,3};
for(int & e : array)
{ e += 2; std::cout<<e<<std::endl;
}
return 0;
}
指针变量的定义
static int* ptr = &i;
*:指针运算符
&:地址运算符
ptr:指向int变量的指针
下图为指针运算
指针变量的初始化和赋值运算
/例6-5指针的定义、赋值与使用
#include <iostream>
using namespace std;int main() {int i;int* ptr = &i;i = 10;cout << "i = " << i << endl;cout << "*ptr = " << *ptr << endl;return 0;
}
- 注意:“地址”中存放的数据类型与指针类型必须相符
- 向指针变量赋的值必须是地址常量或变量,不能是普通整数,例如:
通过地址运算“&”求得已定义的变量和对象的起始地址
动态内存分配成功时返回的地址 - 例外:整数0可以赋给指针,表示空指针。
- 允许定义或声明指向 void 类型的指针。该指针可以被赋予任何类型对象的地址。
- 例: void *general;
例6-6 void类型指针的使用
#include <iostream>
using namespace std;int main() {void *pv;int i = 5;pv = &i;int *pint = static_cast<int *>(pv);//void指针转换为int指针cout << "*pint = " << *pint << endl;return 0;
}
指向常量的指针(只读的指针,不可改写)
const int *p1 = &a;
int b;
p1 = &b;//可以
*p1 = 1;//编译错误
指针类型的常量
int a= 30;
int b =10;
int * const p2 = &a;
p2 = &b;//编译失败,指针本身是常量不可改变
指针类型的算术运算
加一运算要看指向对象的字节数
指针类型的关系运算
- 相同类型之间
- 指针可以和零之间进行等于或不等于的关系运算。 例如:p==0或p!=0
定义指向数组元素的指针
定义与赋值
- int a[10], *pa;
- pa=&a[0]; 或 pa=a;
等效的形式
- *pa就是a[0],*(pa+1)就是a[1],... ,*(pa+i)就是a[i].
- a[i], *(pa+i), *(a+i), pa[i]都是等效的。
注意
不能写 a++,因为a是数组首地址、是常量。
指针数组
#include <iostream>
using namespace std;int main() {int line1[] ={1,0,0};int line2[] ={0,1,0};int line3[] ={0,0,1};int * pLine[3] = {line1, line2, line3};cout << "Matrix test: " << endl;for(int i = 0; i < 3; i++){for(int j = 0; j < 3; j++)cout << pLine[i][j] << " ";cout << endl;}return 0;
}