设有定义: struct complee int real, unreal;data1= 1. 8, data 2.则以下赋值语句中错误的是A)data2=data1; B) data2=(2, 6); C) data2. real=datal. real; D) data2.real=data1. unreal;
时间: 2024-04-11 15:31:26 浏览: 23
D) data2.real=data1. unreal; 是错误的赋值语句。
在结构体赋值中,只能将一个结构体变量的所有成员一次性赋值给另一个结构体变量。所以选项 A) data2=data1; 是正确的赋值语句。
选项 B) data2=(2, 6); 是将一个逗号运算符表达式的结果赋值给 data2,这里的结果是 6,所以也是合法的赋值语句。
选项 C) data2.real=data1. real; 是将 data1 的 real 成员的值赋值给 data2 的 real 成员,所以也是正确的赋值语句。
选项 D) data2.real=data1. unreal; 是将 data1 的 unreal 成员的值赋值给 data2 的 real 成员,这是错误的,因为它们的成员类型不匹配。
所以,选项 D) data2.real=data1. unreal; 是错误的赋值语句。
相关问题
2、设有单链表的存储结构定义如下: typedef struct LNode{ int data; struct LNode *next; }*...
这是一个单链表的结构体定义,其中LNode表示链表的结点,包含一个整型数据成员data和一个指向下一个结点的指针成员next。
如果要创建一个单链表,可以通过多次调用malloc函数动态分配结点空间,并将其连接起来形成链表。以下是一个示例代码,实现了创建一个包含5个结点的单链表,并输出其中的数据:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
struct LNode *next;
} *List;
List createList(int n) {
List head = (List) malloc(sizeof(struct LNode));
head->next = NULL;
List tail = head;
for (int i = 0; i < n; i++) {
List p = (List) malloc(sizeof(struct LNode));
p->data = i;
p->next = NULL;
tail->next = p;
tail = p;
}
return head;
}
void printList(List head) {
List p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
List list = createList(5);
printList(list);
return 0;
}
```
假设有定义: struct s { int data; struct s *next; }; struct s a[3] = {{1, &a[1]}, {2, &a[2]}, {3, &a[0]}}; struct s *p=NULL; 要让p->data的值是2. 如何为p 赋值?
要让`p->data`的值是2,需要让`p`指向`a`数组中第二个结构体,即`{2, &a[2]}`。可以使用以下代码为`p`赋值:
```c
p = &a[1];
```
这样,`p`就指向了`a`数组中第二个结构体,即`{2, &a[2]}`,从而可以通过`p->data`访问到2这个值。