C++笔记(?):指针补充
一、a[]与(a)[]
[]
运算符的优先级高于*
,因此int a[]中,a先于[]结合表示一个数组,而后int * 表明了数组的每个元素的数据类型——int指针.
例如一个int p[4]:
而int (*a)[4]
中,(a)表示a是一个指针,而后int [4]表明a指向的是有四个元素的int数组.
例如一个int (q)[4]:
int *p[4];
int (*q)[4];
int one[3][4] = {{1, 2, 3, 4}, {11, 12, 13, 14}, {21, 22, 23, 24}};
int two[3] = {10, 20, 30};
int three = 100;
int four[4] = {101, 202, 303, 404};
q = one;
*p = two; // *p[0] = two
*(p + 1) = &three; // *p[1] = &three;
*(p + 2) = four; // *p[2] = four;
*(p + 3) = new int [6]; // *p[3] = new int [6];
cout << q[1][1] << endl; //输出12
for(int i=0; i<3; i++)
{
int k = 1;
if(i == 0) k = 3;
if(i == 1)
{
//printf("p[%d] = %d\n", i, *(*(p + i)));
printf("p[%d] = %d\n", i, *(p[i]));
continue;
}
if(i == 2) k = 4;
for(int j=0; j<k; j++)
printf("p[%d][%d] = %d, ", i, j, *(*(p + i) + j)); // p[i][j]
}
二、**
首先定义一个变量指针:
int a = 1;
int *p = &a;
int **q = &p;
*q
是一个指针,int *
表明指针q是指向int指针的指针.
通过q访问/修改a:
printf(“%d\n”, **q);
**q = 2;
三、*&
int *&a
中,&a
是引用,引用的对象是int *
指针.
int &*p
,指向引用的指针不存在,因为引用不是实体.
第n版swap函数:
#include <iostream>
using namespace std;
void swap(int * & a, int * & b)
{
int * tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 3,b = 5;
int * pa = & a;
int * pb = & b;
swap(pa, pb);
cout << *pa << "," << * pb;
return 0;
}