#include<iostream>
using namespace std;
int main()
{
int a[5] = { 1,2,3,4,5 };
int* p = &a[0];
for (int i = 0; i < 5; i++)
{
cout << *(p + i) << " ";
}
return 0;
}
若p指向a[0],那么p+i指向a[i].
一维数组名是一个常量指针,a相当于整形指针int*(常量)
int *p = a;//p=&a[0];
a[0]~ *a ~ *p
a[i]~ *(a+i)~ *(p+i)
指针变量可以进行运算
int a[5], * p = a;//a[0]
p++;//a[1]
一维数组访问数组元素方式:
*(a+i)==a[i]==*(p+i)==p[i]
数组名 数组下标 指针
二维数组
int a[m][n];
*(a+i)//第i行数组(a[i])
*(a+i)+j//a[i][j]的地址
*(*(a+i)+j)//a[i][j]
a[i][j]==*(*(a+i)+j)==(*(a+i))[j]==*(a[i]+j)
#include <iostream>
using namespace std;
int main()
{
static int b[][3] = { {1,2,3},{4},{5,6} };
b[0][2] = 7;
b[1][2] = 8;
cout << **b << "\t" << **(b + 1) << "\t" << *(*(b + 1) + 2) << "\n";
cout << b[0][2] + b[1][2] + b[2][2];
return 0;
}
在给定的代码中,**b、**(b+1)和*(*(b+1)+2)是指针操作符的组合,用于访问二维数组b中的特定元素。
- **b:这表示对指向b[0][0]的指针进行两次解引用操作,即获取b[0][0]的值。
- **(b+1):这表示对指向b[1][0]的指针进行两次解引用操作,即获取b[1][0]的值。
- *(*(b+1)+2):这表示对指向b[1][0]的指针进行一次解引用操作,然后再加上2,最后进行一次解引用操作,即获取b[1][2]的值。
三维数组:*(*(*(c+i)+j)+k)