1: 指针与数组
初始化指针数组,隐式指针转换
int main() {
cout << "C++指针数组" << endl;
int val1[5];
for (int i = 0; i < 5; ++i) {
val1[i] = i;
}
//近似理解为 int *p = &val[0]; 在定义指针的时候,int *p 它的右值应该是一个地址
int* p5 = val1;
///这里发生了隐式指针转换:数组自动转换为指向第一个元素的指针
printf("%d\n", *p5); ///指针p指向val的第一个元素,即val[0]
int t = 5;
while (t--) {
// 可以直接对指针进行加减运算,就和迭代器一样
printf("%d\n", *(p5++));///输出0-5
}
///指针可以做差:
int* p6 = &val1[10], * p7 = &val1[20];
printf("%d\n", p7 - p6); //10
printf("%d\n", p6 - p7); //-10
///还可以比比较大小:
printf("%d\n", p6 < p7 ? p7 - p6 : p6 - p7); //10
}
打印结果:
C++指针数组
0
0
1
2
3
4
10
-10
10
结论
1: 在定义指针的时候,int *p 它的右值应该是一个地址 所以指针初始化应该这样写
int *p = new int[5];
2: *p ---》指针p指向数组val 的第一个元素值 即:val[0]