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;
}
posted @ 2022-09-06 15:01  Wang_ZR  阅读(60)  评论(0)    收藏  举报