C++: 指针微探(指针与数组)

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]
      
    

你可能感兴趣的:(C++从入门到精通,C++)