(*p)[4]的问题?????????

laye999 2003-09-29 11:59:08

(*p)[4]
*p[4]
请能帮我解释下它们的含义和区别,看书看不懂,晕!!!!
...全文
66 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hubs 2003-09-30
  • 打赏
  • 举报
回复
实际上,(*p)[m]在二维数组里面是一个行指针,而*p[m],就是一个指针数组
simclock 2003-09-30
  • 打赏
  • 举报
回复
(*p)[4] 指先*p得出一内存的地址,然后取偏移量为4的数据
*p[4] 指取p[4]所指向的数据

初学,如有错误请执教
lemon520 2003-09-30
  • 打赏
  • 举报
回复
(*p)[4] //括号的优先级最高。所以(*p)的结果是得到了p所指的地址,然后在向后偏移4个位置


*p[4] //在没有括号的情况下,[]的优先级教高,所以p[4]的结果得到了p[4]的地址,然后用*
得到了p[4]中的变量。
ggg82 2003-09-30
  • 打赏
  • 举报
回复
(*p)[4]这种写法第一次见,对指针加括号,除了函数指针外,我还没用过。
ssbull 2003-09-30
  • 打赏
  • 举报
回复
int (*p)[4]: 定义一个长度为4的指针数组,他好比一个二维数组,
int *p[4]:定义一个长度为4的数组指针,他的每一个元素都是指针
RainWindy 2003-09-30
  • 打赏
  • 举报
回复
#include <stdio.h>
main()
{
int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},{17,18,19,20}};
int (*p)[4];
p=a;
int a1[]={1,2,3,4};
int a2[]={5,6,7,8,9,10};
int a3[]={11,12,13};
int a4[]={14,15,16,17,18,19,20};
int *p2[4];
p2[0]=a1;
p2[1] = a2;
p2[2]=a3;
p2[3]=a4;
printf("%d\n",p[1][0]); // a[1][0]
printf("%d\n", p2[1][0]); // a2[0]
printf("%d\n",p[1][5]); // *(a[1]+5)
printf("%d\n", p2[1][5]); // a2[5]
int*s=p[3];
printf("%d\n", *s);
s=p2[3];
printf("%d\n", *s);
}
运行结果:
5
5
10
10
13
14
int *p2[4];
指向指针的数组,这个数组4个指针,每个指针指向一个int*型,长度可以不一样,比如p[0]为4个元素的指针,p[1]为5个元素的指针等等
int (*p)[4];
指向数组的数组指针,这个指针的长度可以不确认,比如可以是4,也可以是5,但是其指向的数据的二维必定是4个元素,比如
int a[4][4];
int b[5][4];
p=a;
p=b;
都是正确的
int c[4][5];
p=c;
是错误的
天外怪魔 2003-09-30
  • 打赏
  • 举报
回复
(*p)[4],由于()的优先级别比较高,所以意思是先取得p地址的值,当然该值可能也是某个地址。然后取出该地址后面第3个单元的值并返回。
*p[4],由于[]的优先级别高于*,所以,首先把p地址后面第3个单元的值取出,当然该值可能也是某个地址,然后取出这个地址指向的值并返回。
daizh 2003-09-30
  • 打赏
  • 举报
回复
同意楼上所说,两位从定义和使用角度解释了这两种情况。
Bandry 2003-09-30
  • 打赏
  • 举报
回复
int (*p)[4]: 定义一个长度为4的指针数组, 用法:p[0] = &a1; p[1] = &a2; ...
int *p[4]:定义一个长度为4的数组指针,用法:p = new int[4]; *(p + 0) = 1; *(p + 1) = 2; ...
mfcer2 2003-09-30
  • 打赏
  • 举报
回复
wgzh(火鸟) 和我都是对的!!!
哈哈哈.......
mfcer2 2003-09-30
  • 打赏
  • 举报
回复
(*p)[4]是定义一个指针,这个指针p是指向一个有4个连续单位的内存片
*p[4] 是定义一个指针数组,这个指针数组有4个单元.

如:
int (*p)[4]/* 定义一个指针,指向一个有四个单元的数组
,它分配的大小是unsigned大小的 */
int *p[4] /* 定义一个指针数组,它分配的大小是sizeof(int *)*4的大小 */

要仔细区分,祝好运!!!
wgzh 2003-09-30
  • 打赏
  • 举报
回复

首先要弄清楚指针跟数组的定义

int (*p)[4];// 这是定义的指针!!! 数组指针;
// 这个指针 指向4个元素的数组;


int *p[4];// 这是定义的数组!!! 指针数组;
// 这个数组有4个元素, 其中每个元素是一个指向整形的指针;

69,371

社区成员

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

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