结构体指针数组?
#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




