C语言指向结构体成员数据的指针的输出

#include<stdio.h>
struct sk
{
int n;
float x;
}data,*p,*i;
main()
{

data.n=166;
data.x=28.76;
p=(struct sk*)&data.n;
i=(struct sk*)&data.x;
printf("%d\n%g\n",data.n,data.x);
printf("%d\n%g\n",*p,*i);
}
这里,p指向的内容可以正确输出,i却不行,但我知道那里出了问题请人帮忙

附上输出结果。

p的使用方法错误。p是结构体指针,p=&data.a 把p指向了结构体成员,不可以。
应该这样
p = &data;
然后用p操作成员:
p->n或者p->a追问

那为什么p的输出是正常准确的呢?

追答

那是因为n是结构中第一个成员,它的地址和结构体的地址是一样的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-01-29
float *p=&data.x;

 int *q=&data.n;

这样试试

C语言指向结构体成员运算符
指向结构体成员运算符属于二元操作符,其右边的操作符是成员变量的名称,左边的操作数是一个指向结构的指针。用途:当使用指向结构体成员运算符时,需要定义一个指针。如果一个函数的传入参数是结构体,且需要该结构体作为返回值的时候,必须采用指针传递的方式,其中对结构体赋值必须使用箭头运算符。优先级...

C语言结构体的取结构体里参数的问题。。。
你好,是这样的,假如是->的话,这个元素就是一个指向结构体的指针,既然是指针,所以取原本结构体的数据就要用->这个符号,那假如本来就是结构体这个元素的话,取当中的成员就可以直接用.例如struct p{ char a;int num }ss;struct p *q;q=ss;假如要去a成员就可以用 q->a或者ss.a ...

c语言结构体数组的输入输出
语言中,结构体(struct)是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。定义与声明 结构体的...

c语言中如何用子函数调用结构体中的变量实现数据的输入与输出。
用子函数实现结构体数据的输入与输出:对于多数子函数的输入与输出,有一定规律性可言。方法1:void型不传值传址调用与声明。main中声明void date_in(),void date_pout()。函数定义前一定在main()前先定义结构体变量(全局变量),然后定义输入或输出程序段。此时再main()调用即可。如下:struct studen...

C语言中如何以结构体变量的地址作为函数形参,以便将指向结构体...
C语言中,所有的变量都存储在内存中,可以通过&运算符获得变量的内存地址,函数调用时,只需要把普通变量前加上&符号,就可以达到传递变量地址的目的。例如:定义一个结构体类型 struct Yearmonthday{ int year, month, day;};定义相关函数,参数类型指定为结构体类型指针 void input(struct Yearmon...

关于c语言结构体变量成员引用的问题
(2)、p是struct student*类型,stu是stu[3]这个数组的第一个元素的地址,p指向第一个元素,因此ABC都是对的,D错在把(int*)变量值赋值给(struct student*)变量,如果有个强制转换则不会错,因为age是结构体第一个变量,其地址就是结构体变量的地址。(3)、与(2)类似,是指针间的赋值,必须...

C语言中p->x是什么意思
C语言中p->x是结构体指针变量p引用结构体成员x的方式。结构体指针变量引用结构体成员用箭头(->)非”结构体指针“变量引用结构体成员用点(.)如:struct test { int x; char str[100];} ;struct test data={1,"test"}; \/\/定义一个结构体变量Data,并初始化struct test *p ; \/\/定义...

C语言如何遍历结构体成员
对于你的这个问题,p存放了字符指针变量a的地址),第二步:p是指向这个结构体的第一个元素,那么怎么找到第二个元素呢?其实只要将p偏移第一个元素大小就行,例如第一个元素是int型数据,那么第二个元素的地址就是p+sizeof(int),以此类推,后面的元素都可以访问到了。

->c语言什么意思?
换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”。问题中的p=p->next ,意思是将p指向的一个结构体实例中的自数据next赋值给p。->运算符 叫做“指向结构体成员运算符”,是C语言和C++语言的一个运算符。一个...

C语言中p->n 什么意思
p是结构体变量,adjvex是结构体中的成员变量。结构体和成员变量的关系就相当于班主任和班级的关系,p->adjvex就相当于班主任p调用学生adjvex,p->adjvex = m的意思就是把m的值给p中的成员变量adjvex。

相似回答