C语言不懂,求高手解释下面程序的意思,希望详细点,谢谢!

struct st
{int n;
float x;
}*p//这是什么意思
void main()
{
struct st arr[5]={10,4,5,};
p=arr;
printf("%d\n",++p->n);

} 主要问题是 struct st 后面又是指针又是数组 ,不懂

struct st
{int n;
float x;
}*p; //这有两层意思,分解开来就是:
1) 声明一个结构体struct st{int n; float x;}
2) 定义一个st结构体指针变量struct st *p;追问

上面的++p->n是什么意思呢,输出结果是什么呀

追答

arr[5] = {10,4,5,}似乎不大对劲!因为结构体相当于一维,struct st arr[5] 应 =
{{1, 1.0}, {2, 2.0},}此类形式。。
^--arr[0] ^--arr[1]
-------
++p前缀表达式,返回值为p自增运算后的值,即 p+1,p指向arr,那么p+1指向arr[1]。
arr[1]->n 即为第一维结构体元素的n值,我的例子应该=2,楼主的就不知是何了。。

追问

恩恩,麻烦再帮我说明下:arr[1]->n即为第一维结构体元素的n值 的意思 就好了,谢谢!

追答

arr[1] : {2, 2.0} //根据结构体分布
^-n //int n
^--x //float x

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-24
p指向结构体st的指针,属于数据类型定义与变量合起来定义:等效于下面:
//定义新的结构体数据类型
struct st {
int n;

float x;

};
//申明结构体变量
struct st *p;
//定义结构体st类型数组并初始化,没有全部初始化,只有数组中的第一个,第二个的第一个成员被初始化,余下的值都是未定义的,可能是任何值
struct st arr[5]={10,4,5,};
//我们都知道数组有一特性,与指针藕断丝连,数组名称指向,数组中的第一个元素,因此有下面的写法
p=arr;//p指向数组中的第一个结构体
//用指针访问结构体成员操作符是->因为,->操作符优先级高于前置++,因此,先取出数组arr中第一个结构体的n成员变量,然后递增1,再使用标准库函数printf输出结果11。
printf("%d\n",++p->n);
相似回答