CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

结构体指针数组?

楼主shangpin(商品)2003-03-01 00:13:47 在 C/C++ / C语言 提问

#include   <stdio.h>  
  typedef   struct   aa{float   x,y;   char   *p;}AA;  
  main()  
  {  
    AA   b1={3.3,5.24,"123"},*p=&b1;  
    printf("%.1f,%.1f,%s",p->x,(*p).y,p->p);  
    printf("%c,%s\n",*p->p*2,&p->p[2]);  
  return   (1);  
  }    
   
  这里的&p->p[2]是什么含义?怎么出来个数组? 问题点数:50、回复次数:7Top

1 楼shangpin(商品)回复于 2003-03-01 00:16:24 得分 0

应该是&还是*,为什么?Top

2 楼2608(爱编的程)回复于 2003-03-01 00:39:30 得分 0

p是指向aa结构的指针,&p即为p的地址,   &p->p[2]   意为   &(p->p[2]),由于&的优先级高  
  于->,所以没有加括号     p->p[]   ,为一个字符指针,指向内存中某块区域,该区域存贮着  
  "abc",p->p中的内容为该区域的首地址,p[2]为b的地址,即为指向该内存的指针,  
  用   &p->p[2]   即可得到该块内存的内容,即字母b,所以在pringf中用了"%s"这个参数Top

3 楼sea_lover(CodePlus)回复于 2003-03-01 00:42:50 得分 50

#include   <stdio.h>  
  typedef   struct   aa  
  {  
  double   x,y;    
  char   *p;  
  }AA;  
  int   main()  
  {  
  AA   b1={3.3,5.24,"123"},*p=&b1;  
  printf("%.1f,%.1f,%s",p->x,(*p).y,p->p);  
  printf("%c,%s\n",*p->p*2,&p->p[2]);  
  return   (1);  
  }    
  首先你要知道p->p…中,前一个p和后一个p是两个不同的变量。前一个是你定义一个指针,用来指向结构体b1的地址。后一个p是结构体中的一个变量。  
  在结构体中,你共有三个变量,其中有一个是指针*p,它可以存放字符串。而你所定义的b1中,恰恰是一个字符串"123",这样的话,结构体上的*p就指向存放123的首地址。  
  而p->p[2]是表示字符串中的第三个字符,即为3.  
   
   
   
   
  ----------------------------------  
  【◇SeaLover◆〗  
      /                     \  
    ★---CSDN---☆  
   \                     /  
  【○Trust   Me●〗  
     
  Top

4 楼chinajiji(菜鸟叽叽)回复于 2003-03-01 00:43:45 得分 0

&p->p[2]   ==   p->p   +   2   ==   指向字符串"123"中的第3个字符的地址,即从这个字符开始打印直到结束.应该是&,不是*,因为printf("%s",p)要求p是一个字符串的首地址;Top

5 楼CuteBit(康)回复于 2003-03-01 00:47:48 得分 0

p->p[2]   已经是数组运算了,取的是地址里的值,  
  所以需要用   &   运算取地址。Top

6 楼chinajiji(菜鸟叽叽)回复于 2003-03-01 00:52:45 得分 0

看这个:  
  printf("%c,%s\n",*p->p*2,&p->p[2]);  
   
  其中   *p->p*2,运算符优先级从高到低:->,*(一元),*(二元),所以:  
  *p->p*2   =   (*(p->p)   )   *   2   ==   ('1')   *   2   =   49   *   2   =   98;  
   
  '1'   ascII   ==   49;   'b'   ascII   ==   98;  
  所以,第一个输出是b;  
  Top

7 楼killer1984(人在天涯)回复于 2003-03-01 10:43:35 得分 0

&p->p[2]中p->p[2]就指向'3',再用&取它的地址,作为输出%s的首地址,即从'3'开始,输出这个字符串.Top

相关问题

  • 用指向结构体的指针变量做数组
  • delete 结构体指针数组(有源码)
  • 结构体数组
  • 一个关于结构体数组的指针问题,请指教!
  • c++中如何定义含有函数指针的结构体数组
  • 关于结构体数组
  • 结构体数组问题
  • 关于结构体数组指针作为函数参数的问题很难解决
  • 请问怎样初始化结构数组的指针?急用!!!!!!!!
  • 数组、结构、指针混用实例,有一处不理解

关键词

  • 指针
  • 结构
  • 字符
  • 内存
  • 区域
  • 数组
  • 字符串
  • 地址
  • 指向
  • 变量

得分解答快速导航

  • 帖主:shangpin
  • sea_lover

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo