c语言指针的问题

chwhang 2003-08-30 07:55:42
1.例如已知:int a=3,*p=a;下面的表达式是什么含。
&*p
*&a
*p++
(*p)++
2.已知:static int a[5]={1,2,3,4,5};int *p=a;下面表达式的含义。
*p
*(a+1)
p[3]
*(p+4)
p+1
*p++
*++p
3.已知static int a[2][3]={{1,2,3},{4,5,6}};
int *p=a,*p;
q=*a;
下面表达式的含义:
**a
**(a+1)
p+1
*(p+1)
*(p[1]+1)
*(*p+1)+2)
**(p+1)
*q
*(q+1)
q+5
谢过各位大虾。
...全文
24 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


1.例如已知:int a=3,*p=a;下面的表达式是什么含。
&*p -> a的地址
*&a -> a本身的值
*p++ -> 如果作为左值则先取*p即a,然后p自增,作为右值也一样.
(*p)++ -> 同上,括号只能是将结合顺序表示得更明白.
2.已知:static int a[5]={1,2,3,4,5};int *p=a;下面表达式的含义。
*p -> a[0]的值.
*(a+1) -> a[1]的值.
p[3] -> a[3]的值.
*(p+4) -> a[4]的值.
p+1 -> a[1]的地址.
*p++ -> 如果p指向a的首地址,则取a[0]的值,然后p指向a[1].
*++p -> 如果p指向a的首地址,先将p指向a[1],然后取a[1]的值.
3.已知static int a[2][3]={{1,2,3},{4,5,6}};
int *p=a,*p; -> p重复定义了.
q=*a; -> q哪来的?
下面表达式的含义:
**a -> a[0][0]的值.
**(a+1) -> a[1][0]的值.
p+1 -> 指向数组a第二行的首地址.
*(p+1) -> 如果指向数组a的首地址,则表示a[0][1].
*(p[1]+1) -> 有问题,p的类型不对.
*(*p+1)+2) -> 写错了?看不懂.
**(p+1) -> p的类型有问题.
*q -> ?
*(q+1) -> ?
q+5 -> ?

chwhang 2003-08-30
  • 打赏
  • 举报
回复
不是作业呀。。我是自学C语言呀。但做了不知道对不对。我买的书又没有答案。自好上来找你们帮忙咯。
看你们做的和我做的一不一样。
luofuliang 2003-08-30
  • 打赏
  • 举报
回复
哇!一次过问这么多问题,是在做作业啊?
这样的话,我觉得不如找本书看看指针那部分比较好。
great_chenliang 2003-08-30
  • 打赏
  • 举报
回复
作业自己作

69,336

社区成员

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

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