【发际线大作战】C++学习记录之指针和二维数组

本文深入解析了一维和二维数组的概念,包括数组的地址表示、行指针和列指针的使用,以及如何通过不同类型的指针处理二维数组。同时,介绍了const指针、空指针和引用的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回顾一维数组

int a[10];

  • 数组名a表示数组的首地址 即a[0]的地址。
  • 数组名a是地址常量
  • a+i是元素a[i]的地址
  • a[i] <=> *(a+i)

二维数组

行指针与列指针

int a[ 3 ] [ 4 ];

  • a是数组名,包含三个元素,a[0],a[1],a[2].
  • 每个元素a[i], 又是一个一维数组,包含四个元素。
  • 二维数组具有二级地址的含义

地址表示的含义:

  • a —— 行地址,数组的首地址,第0行的首地址
  • a+i——行地址,第i行的首地址
  • a[ i ] <=> *(a+i)—— 列地址,第 i 行第0列的元素地址
  • a[ i ]+j <=> *(a+i)+j—— 列地址,第i行第j列的元素地址
  • *( a[ i ]+j ) <=> ((a+i)+j) <=> a[ i ][ j ] 第i行第j列元素值

行指针

定义形式:数据类型 (* 指针名) [ 一维数组长度 ]; (可以让指针指向二维数组的某一行)

多维数组用指针处理的各种方法

(1)指向数组元素的指针变量(单级间址)

适用于数组连续的存放。
注意 要将第一个元素的地址给指针,而不是把数组名给指针。(二维数组名代表地址的地址)

int *p=&a[0][0];

(2)指向由m个元素组成的一维数组的指针变量(行指针)

int a[2][1]={{1},{2}};
int (*q)[2]=a,i,j;
for(i=0;i<2;i++)
{
	for(j=0;j<1;j++)
	{
		cout<<*(*(q+i)+j)<<endl; //*q永远指向数组a的第一行
	}//*(q+i)=q[i]
}

(3)用指针数组处理二位数组

int a[2][1]={{1},{2}};
int *q[2],i,j;
for(i=0;i<2;i++)
{
	q[i]=a[i];
	for(j=0;j<1;j++)
	{
		cout<<*(*(q[i]+j))<<endl; 
	}
}

(4)用指向指针的指针

int a[2][1]={{1},{2}};
int *pn=&a[0][0]**qn=&pn;

for(;pn<=&a[2][1];pn++,qn=&pn)
{
	cout<<**qn<<endl; 
}

其他指针

const指针

1.指向常量的指针

const 类型名 *指针变量名
eg:

const int a=12;
const int *pa=&a;

2.常指针

指针变量的值是常量,即指针变量的指向不能改变
类型名 *const 指针变量名
说明:必须在定义的时候为其初始化,且不可再改变。
eg:

char *const p="hello!";

空指针

void指针为空指针

void *pa=&a;

引用

对数据的引用就是给一个变量起一个别名

int a;
int &b=a;

注意:
不能对数组进行引用,不能建立引用的引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值