多維數組與多維指針

來源裏的關於數組指針的題目,參考,通過下面的測試:html

#include <cstdio>
#include <time.h>
using namespace std;


void test() {
    char *a = "abc";
    printf("%08x %08x\n", a, a + 1);
}

void test1() {
    int **a = new int*[10];
    for (int i = 0; i < 10; i++) 
        a[i] = new int[10];

    
    for (int i = 0; i < 10; i++) {
        printf("%08x %08x %08x\n", a[i], a + i, &a[i]);
    }

    printf("\n");

    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++)
            printf("%08x ", a[i] + j);
        printf("\n");
    }

    printf("%08x\n", &a + 1);
    
}

void test2() {
    int *a = new int[3];
    int *b = new int[3];

    for (int i = 0; i < 3; i++)
        printf("%08x\n", a + i);

    for (int i = 0; i < 3; i++)
        printf("%08x\n", b + i);
}

void test3() {
    int a[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    
    printf("%d\n", sizeof(a));

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%08x ", &a[i][j]);
        }
        printf("\n");
    }

    printf("%08x %08x %08x %08x %08x\n", (int*)a[0] + 1, a[0] + 1, a[1], &a[1], a + 1);
    printf("%08x %08x %08x %08x\n", &a, &a[0], &a + 1, &a[0] + 1);
    printf("%08x %08x %08x %08x\n", &a, &a[0], (int **)&a + 1, (int *)&a[0] + 1);
    int* t1 = (int *)(&a + 1);
    int* t2 = (int *)t1 - 1;
    //printf("%08x\n", *((int*)(&a + 1) - 1));

    //printf("%d\n", (int *)((int *)a[3] - 1));
    /*
    int *ptr = (int *)(&a + 1);
    printf("%d\n", *(ptr - 1));
    */
}

void test4() {
    int a[2][2][2] = {
        {{1, 2}, {3, 4}},
        {{5, 6}, {7, 8}}
    };

    int *b = (int *)a;
    for (int i = 0; i < 8; i++) {
        printf("%d ", b[i]);
    }
}

void test5() {
    struct A {
        char a[3];
    };

    A a;
    A* b = &a;
    printf("%08x %08x %08x %08x\n", &a, &a + 1, b, b + 1);
}

int main()
{
    //test1();
    //test2();
    //test3();
    //test4();
    test5();
    while (1);
}

 

須要注意下面幾點:數組

1. 數組名是類型名,能夠當成一個數據結構,a[0]能夠當作一個int (*p)[n]指向n維數組的指針;數據結構

2. 本身在堆中分配的多維指針,每維指針都在堆中佔用必定的空間;測試

3. 棧中的多維數組是用線性排列的,一個挨着一個,而堆中的數組是在堆中依次排放的,並且排放的首地址貌似須要是16的倍數。spa

相關文章
相關標籤/搜索