int*p[2]与int(*p)[2]
可以这样来用:
#include <iostream.h>
void main(){
int*p[2];
int a[3]={1,2,3};
int b[4]={4,5,6,7};
p[0]=a;
p[1]=b;
for(inti=0;i <3;i++)cout < <*p[0]+i;//cout < <**p+i;
cout < <endl;
for(i=0;i <4;i++)cout < <*p[1]+i;//cout < <**p+i;
}
(2)对于 int(*p)[2],它相当于一个二维数组的用法,只是它是一个n行2列的数组,可以这样来用:
#include <iostream.h>
void main(){
int (*p)[2];
int b[3][2]={{1,2},{3,4},{5,6}};
p=b;
for(inti=0;i <3;i++){
for(intj=0;j <2;j++)//cout < <p[i][j];//cout < <*(*(p+i)+j);
cout < <endl;
}
}
注意:对于(1)为行数确定、列数不确定,即为2*n型的。(2)为n*2型的数组的指针用法,即行数不确定、列数确定。对于(1)其等价形式如下:
#include <iostream.h>
voidmain(){
int**array;
array=newint*[2];
inta[3]={1,2,3};
intb[4]={4,5,6,7};
array[0]=a;//*array=a;
array[1]=b;//*(array+1)=b;
for(inti=0;i <3;i++)cout < <array[0][i];//cout < <*array[0]+i;
cout < <endl;
for(intj=0;j <4;j++)cout < <array[1][j];//cout < <*array[1]+j;
}
其实以上用法即这我们常用的动态二维数组的用法。
a) 一个整型数(An integer)
b)一个指向整型数的指针( A pointer to an integer)
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r
d)一个有10个整型数的数组( An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to
integers)
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function
that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that
takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to
int (*p)[4];//是指向一个2维数组的指针int **P;//是一个指针的指针两个都是指向地址的int (*p)[4] 是接收二维数组的地址(常量)int **p 是接收指针变量的地址(变量)
int *p;是一个指针变量,与之相对应的是int p[n];int (*p)[4];//是指向一个2维数组的指针,与之相对应的是int p[][4]; int **p;//是指向一个指针的指针 ,与之相对应的是int *p[n],它们都是指向字符串的指针数组,而且二位动态数组开辟后只能将值赋予它(**p),因为只有它的数据结构才能满足;两个都是指向地址的 。很多朋友为二维动态数组的数据结构感到困惑,现在我将我对它的分析先给大家,希望对大家能有一些帮组:先通过p=(int **)malloc(n*sizeof(int
*));相当分配了n个连续的int *类型的内存空间,它们的地址是相连的,即p[n]数组,其类型是int *类型,现在为数组中的每个变量(p[0]、p[1]、p[2]…p[n-1])赋值,赋的值都是地址值,也就是for(i=0;i<n;i++)p[i]=(int *)malloc(m*sizeof(int));其中,每个p[n]相当于一维数组的数组名,由于内存分配函数分配内存是随机的,所以这n个一维数组并不是相连的,这与二维静态数组中的每个一维数组的地址是相连接的不同。