int (*p)[5];是什么意思 怎么使用

sanbailiushiliuye 2009-12-15 12:26:40
int (*p)[5];是什么意思 怎么使用
...全文
1824 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlyces 2009-12-15
  • 打赏
  • 举报
回复
mark
  • 打赏
  • 举报
回复
[Quote=引用楼主 sanbailiushiliuye 的回复:]
int (*p)[5];是什么意思 怎么使用
[/Quote]

分2部分来看。

int a[5]; //a是一个数组
a=*p //p是一个指向a的指针


清楚了么。
blackboycpp 2009-12-15
  • 打赏
  • 举报
回复
http://www.wangchao.net.cn/bbsdetail_33593.html

(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;
  }
  其实以上用法即这我们常用的动态二维数组的用法。
deng1243 2009-12-15
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
int a[2][5]={1,2,3,4,5,6,7,8,9,10};
int(*p)[5];
printf("a[1][3]=%d",*(*(p+1)+3));
}

楼主可以试试这个例子
mstlq 2009-12-15
  • 打赏
  • 举报
回复

void fun(int (*p)[5])
{};

int main()
{
int vi[5]={1,2,3,4,5};
int vvi[3][5];
int (*p)[5];
p=&vi;
printf("%d",(*p)[2]);

fun(vvi);
return 0;
}
deng1243 2009-12-15
  • 打赏
  • 举报
回复
定义一个指针,指向整形数组 int [5]
nimmmmni 2009-12-15
  • 打赏
  • 举报
回复
mark
lunarfan 2009-12-15
  • 打赏
  • 举报
回复
int (*p)[5];
先看括号里面首先他是个指针,他是一个指向一个一维数组的指针。
这个一维数组的大小是5.
hbvanguard 2009-12-15
  • 打赏
  • 举报
回复
p为指向二维数组的指针,数组的第二维大小为5
zhangjie199011087 2009-12-15
  • 打赏
  • 举报
回复
指向数组的指针!
alexhilton 2009-12-15
  • 打赏
  • 举报
回复
P是一个指针指向一个大小为5的整形数组
FollowYourHeart 2009-12-15
  • 打赏
  • 举报
回复
简单来讲,可以把它理解成二维数组的行指针。
h3coder 2009-12-15
  • 打赏
  • 举报
回复
p是数组指针,
#include<stdio.h>
int main()
{
int a[2][5]={1,2,3,4,5,6,7,8,9,10};
int(*p)[5];
printf("a[1][3]=%d",*(*(p+1)+3));
}


运行一下这个,什么都清楚了。
fenglingxiaowu 2009-12-15
  • 打赏
  • 举报
回复
学习了~`
z569362161 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wbgxx 的回复:]
指针数组
[/Quote]

是错的
z569362161 2009-12-15
  • 打赏
  • 举报
回复
指针数组:一个数组里存放的都是同一个类型的指针,通常我们把他叫做指针数组。
int * a[10];它里边放了10个int * 型变量,由于它是一个数组,已经在栈区分配了10个(int * )的空间,也就是32位机上是40个byte,每个空间都可以存放一个int型变量的地址,这个时候你可以为这个数组的每一个元素初始化.
int * a[2]={ new int(3),new int(4) };
数组指针 : 一个指向一维或者多维数组的指针;
int * b=new int[10]; 指向一维数组的指针b ;
注意,这个时候释放空间一定要delete [] ,否则会造成内存泄露, b 就成为了空悬指针.
int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二维int型数组的首地址.
注意:在这里,b2等效于二维数组名,但没有指出其边界,即最高维的元素数量,但是它的最低维数的元素数量必须要指定!就像指向字符的指针,即等效一个字符串,不要把指向字符的指针说成指向字符串的指针。这与数组的嵌套定义相一致。
int(*b3) [30] [20]; //三级指针――>指向三维数组的指针;
int (*b2) [20]; //二级指针;

苍蝇①号 2009-12-15
  • 打赏
  • 举报
回复
定义了一个指向数组形式为int [5]的指针
sanbailiushiliuye 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 blackboyofsnp 的回复:]
http://www.wangchao.net.cn/bbsdetail_33593.html

(1)int* p[2] 是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型。
  可以这样来用:
  C/C++ code#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#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)其等价形式如下:
  C/C++ code#include<iostream.h>
  void main() {
  int** array;
  array=newint* [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;  }  其实以上用法即这我们常用的动态二维数组的用法。
[/Quote
谢了 很有用
shangqiuzuidong 2009-12-15
  • 打赏
  • 举报
回复
P是一个指针,指向一个包含5个元素的数组,而这个数组存的元素是int型
也就是我们所说的指针数组;用法参考#4楼的:
#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;
  }
  }
we_sky2008 2009-12-15
  • 打赏
  • 举报
回复
p为指向int类型的数组长度为5的数组指针
加载更多回复(9)
昨日,11.19,最新整理了,第61-80题,现在公布上传。 另加上之前公布的第1-60 题,在此做一次汇总上传,以飨各位。 可以这么说,绝大部分的面试题,都是这100 道题系列的翻版, 此微软等公司数据结构+算法面试100 题系列,是极具代表性的经典面试题。 而,对你更重要的是,我自个还提供了答案下载,提供思路,呵。 所以,这份资料+答案,在网上是独一无二的。 ------------------------------------ 整理资源,下载地址: 答案系列: 1.[最新答案V0.3 版]微软等数据结构+算法面试100 题[第21-40 题答案] http://download.csdn.net/source/2832862 2.[答案V0.2 版]精选微软数据结构+算法面试100 题[前20 题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1 版本,进行的校正与修正。 3.[答案V0.1 版]精选微软数据结构+算法面试100 题[前25 题] http://download.csdn.net/source/2796735 题目系列: 4.[第一部分]精选微软等公司数据结构+算法经典面试100 题[1-40 题] http://download.csdn.net/source/2778852 5.[第1 题-60 题汇总]微软等数据结构+算法面试100 题 http://download.csdn.net/source/2826690 更多资源,下载地址: http://v_july_v.download.csdn.net/ 若你对以上任何题目或任何答案,有任何问题,欢迎联系我: My E-mail: zhoulei0907@yahoo.cn ------------- 作者声明: 本人July 对以上公布的所有任何题目或资源享有版权。转载以上公布的任何一题, 或上传百度文库资源,请注明出处,及作者我本人。 向你的厚道致敬。谢谢。 ---July、2010 年11 月20 日。 ------------------------------------------------------ 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html

70,006

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧