| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2325 人关注过本帖
标题:指针
只看楼主 加入收藏
MooGu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-2-9
收藏
得分:0 
这个题目的答案肯定是A,但B也会经常被用到,而且也合法,只不过不是强类型匹配罢了。我只能说出题的人很无聊。
C语句是错误的,因为申明中p是一个指向char类型变量的指针,而指针是不允许进行乘法运算的,而且加法运算也没有意义(至于能不能进行我没试过,不好说)。
D语句中赋值符两端操作数类型不统一,而且不是兼容类型(如char类型可赋值给int类型,便是兼容类型)。
这道题目的主要是要读懂申明:
char *p,val; >> p是一个指向char类型变量的指针,val是一个char类型变量
从这个申明中可以看到宏定义和typedef的区别:
{
#define CHAR_PTR char*
CHAR_PTR p,val;
}
同上面的申明相同。
{
typedef char* CHAR_PTR;
CHAR_PTR p,val;
}
这个申明中p,val都是指针。
(注:没有初始化不是语法错误,是逻辑错误,是可以允许的)

[[it] 本帖最后由 MooGu 于 2008-2-22 19:35 编辑 [/it]]
2008-02-22 19:32
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
A 和 B 确实可以通过编译。

但是 p 指向的位置是随机的。

—>〉Sun〈<—
2008-02-22 19:35
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
char *p,val;
A:val=*p; //p指向的空间不确定,可能造成非法读取
B:*p=10;  //p指向的空间不确定,可能造成非法写入
C:p=3*p+1; //指针的乘法无意义
D:val=p;  //类型不匹配

如果题目参照的编译器是TC的话,B是正确的,如果是考试的时候,就写无正确选项并把所有答案错的理由写在选项后面,或者当堂把老师叫过来质疑。
2008-02-22 22:07
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
如果anyone对我说的有什么异议,可以在标准一点的编译器上编译并运行下面的代码
程序代码:
#include <stdio.h>
int main()
{
    {char *q=NULL;}    
    char *p,val;
    val=*p;
}

运行出错是因为一次读非法。
我们知道编译器为auto变量分配的是栈空间,在超出变量生存周期后自动释放
{char *q=NULL;}的目的就是在p将指向的空间写上一个0,为了保证能看到错误……

[[it] 本帖最后由 leeco 于 2008-2-22 22:30 编辑 [/it]]
2008-02-22 22:25
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
更赞成11楼的,选A对
如果内存空间中空闲的地址空间不多的话,会造成系统崩溃的.
而选A的话,只是val被赋予的值是无意义的
2008-02-26 20:24
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
在封卷前的那一刻我把A改成了B[bc02]
2008-02-26 20:26
hago
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-11-3
收藏
得分:0 
应该是A吧
A:val=*p是将p所指向的值赋给val
D:val=p中val是字符型 而p是指针变量
2008-02-27 09:46
快速回复:指针
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022885 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved