基础问题:C++中关于指针类型(* &运算符),一维,二维数组的使用

目录
  • 指针类型, & * 运算符号
  • 一维数组
  • 二维数组

C++中有一种特殊的数据类型——指针类型,与之相关的有两个单目操作符, * 和 & 下面着重介绍他们的使用,直接看代码比较清楚。

int main(int argc,char* argv[]){
	//下面讨论 指针类型,&运算符,*运算符号的用法


	int b = 5; //d定义一个整型
	int* a;   //创建一个整数指针类型的变量a,   a中存放的是int类型变量的地址


			//指针变量必须初始化,不然无法通过编译
	//cout << "没有初始化的int*类型的地址为:" << a << endl;  报错
	//   &运算符号是取地址,是一个单目运算符
	a = &b;

	cout << "b的地址为:" << a << endl;
	cout << "b的值为:" << b << endl;
	cout << "*a的值为:" << *a << endl;
	cout << "a+1的值为" << a + 1 << endl;
	return 0;
	}
	

在这里插入图片描述

总接几个点:

  • 指针类型标识符为:类型名* ,如 int* char* ,这时候int* 是一个整体。 这样定义指针类型的变量且必须初始化,否则报错
  • 关于*运算符, * 是一个单目运算符,后接地址。
  • 关于&运算符,& 是一个单目运算符,后接变量(取出变量的地址)
一维数组

下面介绍一维数组的定义,元素的访问,一维数组名的意义,如何在函数中传递与修改一维数组。直接上代码。

int main(int argc,char* argv[]){
	int array[5] = { 1,3,5,7,9 };

	cout << "array的值:" << array << endl;
	cout << "*array的值:" << *array << endl;
	cout << "&(*array的值):" << &(*array) << endl;
	cout << "*(array+1)的值:" << *(array+1) << endl;

	//下面考虑一维数组在函数中的传递
	fun(array);
	cout << "修改后的array[2]值为:" << array[2] << endl;
	return 0;
	}

void fun(int* array) {

	//cout << array << endl;

	cout << "(fun)内部进行,*(array+1)=3??  值为:" << *(array + 1) << endl;

	*(array + 2) = 100;

	//所以array代表的是这个一维数组的地址(也是第一个整数的地址),数据类型为:int* 
	//通过这种方式可以不传入数组而改变数组内的值

}

在这里插入图片描述

总结:

  • 一维数组名代表一维数组第一个元素的地址,是指针类型。
  • 指针类型可以进行±运算,每次地址的改变量是对于类型的内存数。可以利用这个特性访问数组元素。
  • 函数传递一维数组时,只需要传递数组名,在子函数内部的访问方式会修改原数组的值。
一维数组

二维数组比一维数组要复杂,对应数组名的意义也没有那么明确,主要介绍一下二维数组的与一维数组的关系,二维数组如何利用指针进行传递。

int main(int argc,char* argv[]){
	//二维数组
	int parray[2][2] = { 2,4,6,8 };
	cout << "parray值为:" << parray << endl;
	cout << "*parray值为:" << *parray << endl;

	cout << "parray[0][0+1]的值为:" << parray[0][0 + 1] << endl;

	cout << "*(parray[0])的值为:" << *(parray[0]) << endl;
	cout << "*(parray[1]+1)的值为:" << *(parray[1]+1) << endl;

	cout << "parray[0][3]值为:" << parray[0][3]<< endl;

	//其中输出parray的符号会报错,所以二维数组的名称没有意义
	//但是parray[i]代表第i行的首地址,类型为相应的指针类型

	//下面考虑二维数组在函数中的传递

	pfun(parray);
	cout <<"在函数内部修改后的 parray[1][1]值:"<< parray[1][1] << endl;

	return 0;
	}

void pfun(int parray[][2]) {

	cout << "在函数内部进行访问,parray[1][1]:"<<parray[1][1] << endl;
	parray[1][1] = 100;
}

在这里插入图片描述
总结:

  • 二维数组名没有任何意义
  • 如果把二维数组看成一个矩阵,那么parray[i]为第i行的第一个元素的地址,那么i行的元素可以按照一维数组的形式访问。
  • 如果把二维数组结构看成连续存储单元结构的化,parray[0]是首地址,可以利用索引值,将二维数组看成一维数组进行访问。
  • 二维数组传递给函数的方式为,形参为:parray[][N],N代表列数必须要有,行数可以省略。实参为二维数组名称:parray
  • 在函数内访问元素按照函数外的方法,同样会修改对应的值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值