A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2的狠正经 中级黑马   /  2014-5-8 08:58  /  1312 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int *p[5]
int (*p)[5]
他们各表示的是什么

4 个回复

倒序浏览
int *p[5],是一个数组,它的大小是5,存放的数据类型是int *,也就是整型指针。  所以它叫指针数组。
int (*p)[5],p是一个指针,指向大小为5的数组,因此这叫数组指针。
回复 使用道具 举报

int *p[5]是个指针数组,p是数组不是指针,这个数组里面存放5个int类型的指针
int (*p)[5]是数组指针,p是指针,不是数组 ,我是这样理解的
举个例子
int a[2][5]={{0,1,2,3,4},{5,6,7,8,9}};
int(*p)[5]=a;
printf("%d\n",(*p)[0]);
打印下就能看出了 ,吧(*p)[]后边中括号的改下数组打印看下结果,还有(*(p+1))[]中括号中输入数字打印看下就直白了
回复 使用道具 举报
我发表了一个相关的帖子
回复 使用道具 举报
(1)int* p[2] 是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型。
  可以这样来用:
  
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
#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列的数组,可以这样来用:
  
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
#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;
  }
  }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马