提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
数组与指针在C/C++学习中一直是一个老生常谈的话题,简单来说,难的一批
一、数组名的含义?
首先我们来简单提三个问题
1,一维数组的数组名代表什么?
2,二维数组的数组名代表什么?
3,二维数组的数组名加一个一维坐标代表什么?
为了直观了解我们写出以下代码
#include<iostream>
using namespace std;
int main()
{
int a[3]={1,2,3};
int b[2][3]={4,5,6,7,8,9};
cout<<a<<endl;
cout<<*a<<endl;
cout<<b<<endl;
cout<<*b<<endl;
cout<<b[0]<<endl;
cout<<**b<<endl;
return 0;
}
运行后我们得到以下结果
其意义不言而喻
于是我们可以知道
1,一维数组的数组名代表一维数组第一个元素的地址
2,二维数组的数组名代表二维数组第一行的整体
3,二维数组的数组名加一个一维坐标代表对应那一行第一个元素的地址
明确几个不同
1,数组元素和数组整体不是一回事(整形数组的数组名不代表数组整体)。
这里有个意外
char s="abcd";
cout<<s<<endl;//可见字符数组可以输出整体
2,数组元素的地址和数组整体的地址在值上有可能相等,但也不是一回事。(二维数组名指向整个数组)。
3,一维数组和二维数组的首地址可以相同,但不是一回事。
4,字符数组和字符串形式上相似但不是一回事。
char s[10]="abcde";
cout<<s<<endl;
cout<<&s[0]<<endl;
cout<<&s<<endl;
二、指向数组元素的指针
以一维数组为例
#include<iostream>
using namespace std;
int main()
{
int a[10]={1,2,3,4};
int *p;
p=a; //P指向a数组;
cout<<*p<<endl;
p+=1; //向后偏移一个元素
cout<<*p<<endl;
cout<<*(a+2)<<" "<<*(p+2)<<endl; //指针地址偏移
cout<<p[2]<<endl; //用下标法访问数组元素;
return 0;
}
于是访问数组元素的方法就可以变为指针
总结
运用指针指向数组更为方便的访问数组元素