目录
- 指针类型, & * 运算符号
- 一维数组
- 二维数组
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
- 在函数内访问元素按照函数外的方法,同样会修改对应的值。