几个很简单的问题,真的。
①对于一个链表程序段:程序代码:
SLIST * creatlist(int *a) { SLIST *h, *p, *q; int i; h = p = (SLIST *)malloc(sizeof(SLIST)); //这是不是意味着h伴随着p的变化而变化? for(i=0; i<N; i++) { q = (SLIST *)malloc(sizeof(SLIST)); q->data = a[i]; p->next = q; p = q; } p->next = 0; return h; //这个函数是如何通过h传回头指针的?我怎么觉得h在跟着p一起变? }
②在二级考试题上看到一个这样的信息:
不带头结点的单项链表结构;
头指针直接指向第一个结点。
问:链表不是定义第一个结点是头结点,第二个结点是首结点吗?怎么还会有第一个结点不是头结点的情况?
③对于共用体方面的东西:
在书上共用体这一点中看到这样一句话:
共用体变量所占的内存长度等于变量中所占字节数最长的成员的长度,下面这个程序段字节最长的成员的长度时8个字节,可,书上写共用体占四个字节,为什么?如下:
程序代码:
union un { int i; float x; }s1, s2, *p;
④还有一道这样的公用体的题目,我表示不知道它是怎么算的:
程序代码:
# include <stdio.h> union un { int i; char c[2]; } int main(void) { union un x; x.c[0] = 10; x.c[1] = 1; printf("\n%d", x.i); return 0; }
输出的答案是266.过程是x.i = x.c[1] * 256 + x.c[0] = 266.这里面为什么c[1]要乘以一个字节所有可能出现的情况,而c[0]却不用乘?