指针
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
}