int **x; 表示定义一个二维指针。
如果想动态分配二维数组,需要先分配行指针数组,再对每行进行数组分配,参考代码如下:
#include <stdio.h>int **就是在内存中开辟4个字节的连续空间,但至于你怎样用,编译器是不管的,所以可能当你用x[0][0]的时候,程序就有可能报错。
(在32位DEV C++中已测试过)
int ** x还有另一个意思
例如:
#include<cstdio>10
20
#include<cstdio>50
(以上程序均在DEV C++测试过,其他编译器请自测)
如有不对,请指出。
声明一维数组int *str;其中str是地址。
与二维相比int **str;str是指什么,*str是指行的首地址吗?
int *str = NULL; *str是指针变量,str是地址
int **str = NULL;
str是*str的地址,*str是**str的地址,所以二级指针又叫“指向指针的指针”
*str是保存第一行的首地址
*(str + 1)是保存第二行的首地址
... ...
*(str + n)是指向第三行的首地址
你可以把调用函数改成printf("%3d", *(*(x+i)+j));