struct {int x,y;}s[2]={{1,2},{3,4}}, *p=s, *q=s;则表达式++p->x和表达式(++q)->x的值分别为
时间: 2024-04-20 19:27:09 浏览: 281
根据题目,结构体 `s` 定义了两个成员变量 `x` 和 `y`,并初始化了两个元素 `{1, 2}` 和 `{3, 4}`。定义了两个指针 `p` 和 `q`,它们指向结构体数组 `s` 的第一个元素。
根据C语言的运算符优先级,成员访问运算符 `->` 的优先级高于自增运算符 `++`,因此 `++p->x` 等价于 `++(p->x)`,表示先访问 `p` 指向结构体的 `x` 成员,然后将 `x` 成员自增。因此,执行完 `++p->x` 后,`p->x` 的值为 `2`,`p` 指向结构体数组 `s` 的第二个元素。
同理,`(++q)->x` 表示先将 `q` 指向结构体数组 `s` 的下一个元素,然后访问该元素的 `x` 成员。因此,执行完 `(++q)->x` 后,`q->x` 的值为 `3`,`q` 指向结构体数组 `s` 的第二个元素。
因此,表达式 `++p->x` 的值为 `2`,表达式 `(++q)->x` 的值为 `3`。
相关问题
struct snake *generateSnake(){ struct snake *s; s = (struct snake*)malloc(sizeof(struct snake)); struct snake *p = s; int x[6] = {2, 3, 4, 5, 5, 5}; int y[6] = {2, 2, 2, 2, 3, 4}; for(int i = 0; i < 6; i++){ struct snake *node; node = (struct snake*)malloc(sizeof(struct snake)); p->next = node; p = p->next; p->i = x[i]; p->j = y[i]; } p->next = NULL; return s; } void drawSnake(int **map, struct snake *s){ struct snake *p = s->next; map[p->i][p->j] = 2; // 蛇头 p = p->next; while(p){ map[p->i][p->j] = 1; p = p->next; } return; }h这个代码使用了什么数据结构
这段代码使用了链表作为数据结构。具体来说,定义了一个结构体 `snake`,其中包含了两个整型变量 `i` 和 `j`,以及一个指向另一个 `snake` 结构体的指针 `next`。在函数 `generateSnake()` 中,通过 `malloc()` 动态分配了一段内存,初始化了一个 `snake` 结构体,并通过循环动态分配了其他结构体,将它们通过 `next` 指针串联起来,形成了一个链表。在函数 `drawSnake()` 中,通过对链表的遍历,将蛇在地图上的位置用数字标记出来。
#include<iostream> using namespace std; typedef struct Point { int x, y; }P; P points[100]; int flag[100] = { 0 }; //排列算法 bool sortP(P p1, P p2) { if (p1.x == p2.x) return p1.y > p2.y; else return p1.x > p2.x; } int S(P p1, P p2, P p) { return 0.5 * ((p1.x * p2.y - p2.x * p1.y) + (p2.x * p.y - p.x * p2.y) + (p.x * p1.y - p1.x * p.y)); } P hull(P p,int mode) { int finalP[100]; if (sizeof(p) <= 2) { for (int i = 0; i < sizeof(p); i++) { flag[i] = 1; } for (int i = 0; i < sizeof(p); i++) { if (flag[i] = 1) { for (int j = 0; j < sizeof(finalP); j++) { finalP[j] = p[i]; } } } } }
这段代码是一个求凸包的算法,其中使用了结构体 Point 来存储点的坐标,使用 flag 数组来标记点是否被访问过。其中的 sortP 函数是用来进行排序的,按照 x 坐标从大到小排列,如果 x 坐标相同则按照 y 坐标从大到小排列。S 函数是用来计算三个点组成的三角形的面积的,最后的 hull 函数是用来求凸包的核心函数。当点的数量小于等于 2 个时,直接返回这些点;否则需要找到最左下角的点作为起点,然后按照顺时针方向扫描所有点,用 flag 数组来标记是否被访问过,最后将所有被访问过的点存储在 finalP 数组中,最后返回 finalP 数组。
阅读全文