int* p[2] 与 int (*p)[2] 的不同

原创 2004年02月22日 23:23:00

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

可以这样来用:

#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(int i = 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(int i = 0; i < 3; i++) {
  for(int j = 0; j < 2; j++) //cout << p[i][j]; //cout << *(*(p+i)+j);
  cout << endl;
 }
}

注意:对于(1)为行数确定、列数不确定,即为2*n型的。(2)为n*2型的数组的指针用法,即行数不确定、列数确定。对于(1)其等价形式如下:

#include <iostream.h>

void main() {

 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;
}

其实以上用法即这我们常用的动态二维数组的用法。

 

 

C++中int *p[4]和 int (*q)[4]的区别

这俩兄弟长得实在太像,以至于经常让人混淆。然而细心领会和甄别就会发现它们大有不同。 前者是指针数组,后者是指向数组的指针。更详细地说。 前: 指针数组;是一个元素全为指针的数组. 后: 数组指针...
  • ajioy
  • ajioy
  • 2011年11月09日 12:10
  • 19668

int(*p)[]和int(**p)[]

1. int(*p)[10]:根据运算符的结合律,()的优先级最高,所以p是一个指针,指向的一个维度为10的一维数组。p一个指向数组的某一行int a[1][4]={1,2,3,4}; int...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2013年07月08日 09:04
  • 3938

int*p[ ]与int(*p)[ ]的不同

举例说明:1)int* p[2] 是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型。可以这样来用:#include using namespace std; int...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2013年07月08日 09:00
  • 4494

c语言中int *p[4]和 int (*)p[4]区别

1,由于[] 优先级高与*所以int *p[4]它先p[4]是定义数组的形式然后和*结合,*p[4]就是数组指针(一个数组中存放的内容是指针变量) ...
  • yinbucheng
  • yinbucheng
  • 2016年06月14日 08:08
  • 3186

关于int *p[n]和int (*p)[n]的超详细讲解

在编程中,会遇到这样的情况: int *p[n]; int (*p)[n]; 还有一种情况是声明函数: int *p(); int (*p)(); 这些分别表示什么意思呢? 表面上看这些问题,好像是...
  • ywb201314
  • ywb201314
  • 2016年07月29日 10:21
  • 1129

如何理解看似复杂的int **p[2][3]; 和int (**p)[3];

我们先看:int a[3];        实际上,我们完全可以理解为int a0; int a1; int a2;  也就是是, 只要理解了int a; 就会理解int a[3]; 如: #incl...
  • stpeace
  • stpeace
  • 2015年01月07日 23:41
  • 3667

int *p[3] 和int (*p)[3] 的区别

int *p[3] p是一个数组,此数组有3个元素,每个元素都是int*类型,也就是指向整型数据的指针类型。 int a=10,b=20,c=30; int*p[3]={&a,&b,&c}; 而i...
  • Sayesan
  • Sayesan
  • 2014年09月02日 09:33
  • 2534

关于int *p[n]和int (*p)[n]

在编程中,会遇到这样的情况: int *p[n]; int (*p)[n]; 还有一种情况是声明函数: int *p(); int (*p)(); 这些分别表示什么意思呢? 表面...
  • zxzxy1988
  • zxzxy1988
  • 2011年12月08日 15:46
  • 3795

C++中关于int *p和 int* p的区别?

根据C++Primer介绍: 对于int* p(这种写法合法,但是容易造成误导),其基本数据类型是int,后面的*其实是声明符。在一组公用的数据类型后面可以使用不同的声明符。例如: int i =1...
  • yangyong0717
  • yangyong0717
  • 2017年06月23日 16:15
  • 679

int (*a)[10] 和 int *a[10] 的区别

int *a[10] :数组指针。数组a里存放的是10个int型指针 int (*a)[10] :a是指针,指向一个数组。此数组有10个int型元素 int *a[10] 先找到声明符a,然后向右看,...
  • hackerwin7
  • hackerwin7
  • 2014年02月27日 18:34
  • 7144
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:int* p[2] 与 int (*p)[2] 的不同
举报原因:
原因补充:

(最多只允许输入30个字)