指针

2020-10-29  本文已影响0人  菜菜的程序猿

指针:一个变量,其值为另一个变量地址;

int *ip; //int 型指针
int var = 20;
ip = &var; //指针中存储int型变量var的地址

指针的算术运算

指针的递增

int var[3] = {10,20,30};
int *ptr;
ptr = var;
for(int i = 0; i < 10; i++){
  printf("%d\ n", *ptr);//依次输出 10,20,30
  ptr++;//移动到下一个位置
}

指针与数组的关系

可以使用指针的算术运算符来访问数组;

int var[3] = {10,20,30};
int *ptr;
ptr = var;
for(int i = 0; i < 10; i++){
  printf("%d\ n", *ptr);//依次输出 10,20,30
  ptr++;//移动到下一个位置
}

但在有些情况下,指针和数组不能互换;数组名为指向数组开头的常量,不能作为左值;

int var[3] = {10,20,30};
int *ptr;
for(int i = 0; i < 3; i++){
  *var = i; //合法
   var++;//不合法
}

C++传递指针给函数

C++允许传递指针给函数,只需简单声明函数参数为指针类型即可;能接受指针作为参数的函数,也能接受数组作为参数;

#include <iostream>
using namespace std;
double getAverage(int *arr, int size);

int main(){
  int A[3] = {1,2,3};
  double ave = getAverage(A, 3); 
}

C++指针数组

要让数组存储指向int或者char类型的指针;如下图为一个指向整数的指针数组的声明:ptr为一个数组,由MAX个整数指针组成;

#include <iostream>
int main(){
  int var[3] = {1,2,3};
  int *ptr[max];
  for(int i = 0; i < 3; i++){
    ptr[i] = &var[i];//赋值为整数的地址
    }
  for(int i = 0; i < 3; i++){
    printf("%d\n", *ptr[i]);//输出1,2,3
   }
}

用一个指向字符的指针数组存储一个字符串序列表,如下所示

#include <iostream>
 
using namespace std;
const int MAX = 4;
 
int main ()
{
 const char *names[MAX] = {
                   "Zara Ali",
                   "Hina Ali",
                   "Nuha Ali",
                   "Sara Ali",
   };
 
   for (int i = 0; i < MAX; i++)
   {
      cout << "Value of names[" << i << "] = ";
      cout << names[i] << endl;
   }
   return 0;
}

C++指向指针的指针

指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链;定义一个指向指针的指针时,第一个指针包含第二个指针的地址;第二个指针指向包含实际值的位置;

#include <iostream>
using namespace std;

int main(){
  int var;
  int *ptr;
  int **pptr;
  var = 100;
  ptr = &var;
  pptr = &ptr;
  
  cout << "var 值为 :" << var << endl; //100
  cout << "*ptr 值为:" << *ptr << endl; //100
  cout << "**pptr 值为:" << **pptr << endl; //100
  
}

上一篇 下一篇

猜你喜欢

热点阅读