当前位置: 代码迷 >> 综合 >> C++学习笔记(Day9 第六章指针与数组)
  详细解决方案

C++学习笔记(Day9 第六章指针与数组)

热度:99   发布时间:2024-01-18 19:24:26.0

 基于范围的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;//编译失败,指针本身是常量不可改变

指针类型的算术运算

加一运算要看指向对象的字节数

指针类型的关系运算

  1. 相同类型之间
  2. 指针可以和零之间进行等于或不等于的关系运算。 例如: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;
}