社区
C语言
帖子详情
(*p)[4]的问题?????????
laye999
2003-09-29 11:59:08
(*p)[4]
*p[4]
请能帮我解释下它们的含义和区别,看书看不懂,晕!!!!
...全文
66
12
打赏
收藏
(*p)[4]的问题?????????
(*p)[4] *p[4] 请能帮我解释下它们的含义和区别,看书看不懂,晕!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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个元素, 其中每个元素是一个指向整形的指针;
你必须知道的495个C语言
问题
1.20 constchar*p、charconst*p和char*constp有什么区别? 复杂的声明 1.21 怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 1.22 如何声明返回指向同类型函数...
连接MySQL错误:create connection SQLException, url: jdbc:mysql://localhost:3306/*****?
2018-11-12 16:14:21.704 ERROR 9752 --- [eate-1537371824] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://localhost:3306/*****?allowMultiQueries=tr...
区块链核心-密码与共识算法
什么是共识算法 背景 分布式系统集群设计中面临着一个不可回避的
问题
,一致性
问题
对于系统中的多个服务节点,给定一系列操作,如何试图使全局对局部处理结果达成某种程度的一致? 这个一致性
问题
大致有如下的场景:...
java.sql.SQLException: No suitable driver found for “jdbc:mysql://localhost:3306/****?
问题
java.sql.SQLException: No suitable driver found for "jdbc:mysql://localhost:3306/****?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=...
void * 是什么?
最近遇到void *的
问题
无法解决,发现再也无法逃避了(以前都是采取悄悄绕过原则),于是我决定直面它。 在哪遇到了? 线程创建函数pthread_create()的最后一个参数void *arg,嗯?传地址还是传值?传值好像有警告...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章