以下为《C语言指针结构及共体类型扫盲题》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
本文说明(约定)及图例:
1 . 本文所涉及的变量(包括指针变量),若不加特别说明均以Turbo C为参考基准。(省得有人抬扛或引发激烈争吵),比如谈到int型就认为它有2字节,尽管有些系统的规定可能不一样。并且stdio.h及conio.h这两个头文件会在程序中省略不写,若需运行程序请自行加上。
2. 本文所涉及的指针类型只涉及普通指针及多层指针(指针的指针的…的指针),不考虑far指针和huge指针。本文所涉及的地址,均为合理的假设值。
3. 图例及说明
图例举例
在本文所表示的意义、说明
一个占4个字节的空间(一小格代表一个字节)
一个占4字节的结构体空间,这个结构体包括两个域,每个域2字节
一个占100字节的空间
一片空间,长度不定,存的是函数fun()的代码
一个占4字节的结构体,有两个a和b字段(域),a占2字节,b占2字节
一个变量P,长度4字节,存的数据是 0x123400FF
*为了简化问题,除非特别说明,否则就不考虑机器放数据的先后顺序,而是照人类习惯
一个变量P,长度4字节,但里面存的数据不确定(随机值)
一个变量P,长度4字节,起始地址0x001234,P是个指针变量,存的是地址0x1234,这个地址指向另一片4字节的空间,空间对应的变量是X,空间首地址(也是X的首地址)0x123400FF,但空间的内容不确定。(文字有点长,结合图来看看吧)
这个图示可以对应这两句:long X; long *P=&X;
这个跟上面的类似,不过,P指向的不再是整个X,而是指向了X的前两个字节(当然首地址也是0x1234FF)。
这个图示可以对应这两句:
long X; int *P=(int*)&X; (前提:int为2字节)
请一定一定要
先看前面的“本文说明”
再看题目!!!!
题目在下一页开始…题01.下面是段程序的代码及输出结果:
程序代码
输出
int main(){
char *cp; int *ip;
short *sp; long *lp;
float *fp; double *dp;
void *vp; FILE *Fp;
printf("%d\t%d\n",sizeof(cp),sizeof(ip));
printf("%d\t%d\n",sizeof(sp),sizeof(lp));
printf("%d\t%d\n",sizeof(fp),sizeof(dp));
printf("%d\t%d\n",sizeof(vp),sizeof(Fp));
getch();
return 0;
}
根据上述,其中sizeof()是一个测量变量长度的函数,则以下说法有哪些正确?
A.程序代码中所列举的几种指针变量的长度均一样
B.程序代码中所列举的几种指针变量的长度碰巧一样
C.这个程序的变量未初始化所以里面的值是随机值,程序输出不具备参考价值
题02. 指针表示的是一个变量的首地址,也就是数据从哪里开始存放。那么,假如上题中的A项是正确的,声明指针时,比如char *cp; 这一句中,里面的char类型有什么用?
没作用,只不过是让程序员记住这个指针指向的是个char
因为指针表示的是首地址,所以系统通过声明语句的char类型 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 是通过写程序来把这些问题解决了的,也就是说,与其说是题目,还不如是我的一种心得总结,只不过是以题目的形式放出来,同时也让看这篇文章的初学者有一个自已思考的机会。
至于说题目的答案就不给了,因为题目的答案就在题目之中,或是四个备选答案中(都是选择题!估计这些答案,不管正确与否,都能给你一点启示)
说太长了,简单地说,也就两个重点:第一,我解决了上面的几个问题(虽是自已想出的问题)后,指针我就算过关了,并可以解决几乎所有的指针问题(高手级别的就算了,不过我还没遇到过~~);第二,不要找我要答案。
2010.7.5
2010.07.22 17:16 修正了“本文说明(约定)”中的两个错误图示
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]
以上为《C语言指针结构及共体类型扫盲题》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。