指针与数组
指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。
#include <iostream>
using namespace std;
const int MAX = 3;
int main ()
{
int var[MAX] = {10, 100, 200};//这里var是一个数组,数组本质上是一个指针,指向数组的第一个元素的地址,
for (int i = 0; i < MAX; i++)
{
*var = i; // 对var进行取值,并且因为var是一个指针,相当于赋予这个地址的值为i
}
*(var + 2) = 500;//将var[2]的值赋值为500
//var++;//这样写就是错误的,因为var是一个指向数组开头的常量,不能改变其值
for (int j = 0; j < MAX; j++)
{
cout<<var[j]<<endl;
}
return 0;
}
输出
2 //可以看出,var为数组中的第一个元素的地址,这里只能改变第一个元素的值,其他的位置的值无改变
100
500
请按任意键继续. . .
指针数组
可能有一种情况,我们想要数组存储指向int或char或其他数据类型的指针。下面是一个指向整数的指针数组的声明。
int *ptr[5]
此处,把ptr声明为一个数组,由5个元素,每个元素都是一个指向int值的指针,
#include <iostream>
using namespace std;
const int MAX = 3;
int main ()
{
int var[MAX] = {10, 100, 200};
int *ptr[MAX];
for (int i = 0; i < MAX; i++)
{
ptr[i] = &var[i]; // 赋值为整数的地址
}
for (int i = 0; i < MAX; i++)
{
cout << "Value of var[" << i << "] = ";
cout << ptr[i] << endl;
cout <<"这个位置原来存储的值为" <<*ptr[i] << endl;
*ptr[i]+=1;
cout <<"这个位置+1被改变后的值为" <<*ptr[i] << endl;
}
cout <<"通过指针的作用,成功将数组的每个元素的值做了改变"<<endl ;
for (int i = 0; i < MAX; i++)
{
cout << var[i]<<endl;
}
return 0;
}
运行结果
Value of var[0] = 008FFD04
这个位置原来存储的值为10
这个位置+1被改变后的值为11
Value of var[1] = 008FFD08
这个位置原来存储的值为100
这个位置+1被改变后的值为101
Value of var[2] = 008FFD0C
这个位置原来存储的值为200
这个位置+1被改变后的值为201
通过指针的作用,成功将数组的每个元素的值做了改变
11
101
201
请按任意键继续. . .