zoukankan      html  css  js  c++  java
  • int*p[ ]、int(*p)[ ]、int(**p)[]的不同

    指针数组的概念:

    一个数组,若其元素均为指针类型数据,称为指针数组,也就是说指针数组中的每一个元素都相当于一个指针变量。定义如下:

    类型名 * 数组名[ 数组长度 ]

    由于[ ]比*优先级高,因此上述定义等价于( 类型名 * ) 数组名[ 数组长度 ].

    数组的指针的概念:

    类型名 (* 数组名) [ 数组长度 ]

    举例说明:

    1)int* p[2] 是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型。

    它是 一个 行数确定、列数不确定,即为2*n型的。

    可以这样来用:

    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        int* p[2];
        int a[3] = {1, 2, 3};
        int b[4] = {4, 5, 6, 7};
    
        p[0] = a;
        p[1] = b;
    
        for(int i = 0; i < 3; i++)
            cout << *( p[0] + i );
         // cout << *( *p + i );
    cout << endl;
    for(int i = 0; i < 4; i++) cout << *( p[1] + i ); // cout << *(*( p + 1 ) + i ); return 0; }

    2)对于 int (*p)[2], 它相当于一个二维数组的用法,只是它是一个n行2列的数组,

    它是n*2型的数组的指针用法,即行数不确定、列数确定。可以这样来用:

    #include <iostream>
    using namespace std;
    
    int main(void)
    {
    
        int (*p)[2];
        int b[3][2] = {{1, 2}, {3, 4}, {5, 6}};
        p = b;
        for(int i = 0; i < 3; i++) 
        {
            for(int j = 0; j < 2; j++) 
                cout << p[i][j]; 
                //cout << *(*(p+i)+j);
            cout << endl;
        }
    
        return 0;
    }

    对与1)其等价形式:

    #include <iostream>
    using namespace std;
    
    int main(void)
    {
        int** array;
        array = new int* [2];
    
        int a[3] = {1, 2, 3};
        int b[4] = {4, 5, 6, 7};
    
        array[0] = a; // *array = a;
        array[1] = b; // *(array+1) = b;
    
        for(int i = 0; i < 3; i++) 
            cout << array[0][i];
         // cout << *array[0] + i;
    
        cout << endl;
    
        for(int j = 0; j < 4; j++) 
            cout << array[1][j];
        // cout << *array[1] + j;
        return 0;
    }                

    3)int(**p)[]

    这个的意义:q是一个指针,指向的元素就是2)中的p.

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    
    int main(void)
    {
        int a[2][2]={1,2,3,4};
        int (*p)[2] = a;//p point to the row of array a 
        for(int i = 0;i<2;i++)//output matrix using p 
        {
                for(int j = 0;j<2;j++)
                {
                        cout<<*(*(p+i)+j)<<" "; 
                }
                cout<<endl;
        }
        int (**q)[2] = &p;//q point to p
        for(int i = 0;i<2;i++)//output matrix using q 
        {
                for(int j = 0;j<2;j++)
                {
                        cout<<*(*(*q+i)+j)<<" "; 
                }
                cout<<endl;
        }
        
        getchar();
    
        return 0;
    }
  • 相关阅读:
    03-HTML之body标签
    02-HTML之head标签
    01-HTML介绍
    第十五章 并发编程
    第十四章 网络编程
    第十三章 模块和包
    第十二章 异常和错误
    第十一章 面向对象进阶
    第九章 常用模块(续)
    003 配置负载均衡
  • 原文地址:https://www.cnblogs.com/theCambrian/p/3650168.html
Copyright © 2011-2022 走看看