指针(三)————指针与数组

指针与数组

指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。

#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
请按任意键继续. . .

猜你喜欢

转载自blog.csdn.net/weixin_38145317/article/details/83341181