以下正确的程序段是 A)int *p; scanf("%d",p); B)int *s,k; *s=100; C)int *s,k;char *p,c; s=&k; p=&c; 20

以下正确的程序段是A)int*p;scanf("%d",p);B)int*s,k;*s=100;C)int*s,k;char*p,c;s=&k;p=&c;*p='a';D... 以下正确的程序段是
A)int *p; scanf("%d",p);
B)int *s,k; *s=100;
C)int *s,k;char *p,c; s=&k; p=&c; *p='a';
D)int *s,k; char *p,c; s=&k; p=&c; s=p; *s=1;
展开
 我来答
Negamax
2012-04-12 · TA获得超过2721个赞
知道小有建树答主
回答量:656
采纳率:100%
帮助的人:276万
展开全部
这是一个很好的问题:
指针的本质就是存放内存地址的一个变量,对应的就是内存中某个单元格的地址。指针就像一把钥匙一样,可以进入对应锁门的那个房间。所以指针在用的时候一定要先初始化,让他指向一个具体的内存中的单元格。你想想给随便给你一把路上捡的钥匙,你能打开你想去的那个房间吗(办公室、家……)。int *p;只是定义了一个指针,他可以指向一个整形的变量。但是你没有具体的告诉他指向那个变量(或者这个变量的地址),那么这个指针就是一个游离态的指针。这是很危险的。
你想想内存中某些地址上方的是操作系统的数据,或者是其它程序正在使用的数据,如果不指定指针指向一个合法的安全的地址,你能随便用指针去修改某个单元格中的值吗?所以一个钥匙一定要指定了开哪扇门才有用!

A int *p ; p没有指向一个合法的地址,这是很危险的。

#include "stdio.h"
#include "conio.h"

main()
{
int *s;
int *p;
printf("s=%d,p=%d",s,p);
scanf("%d",s);
getch();
}

我的系统上s=2,p=33,输入2回车内存不能读。应为这个地址被操作系统占用了。

B: 同样的道理。s没有具体指向某个地址单元格。

C :对的

D: 就像一把单齿的钥匙只能开单齿的锁。圆齿钥匙只能开圆齿的锁。所以整形的指针智能指向整形的变量。 大三学了编译原理你就知道了。int和char的字节长度不一样。所以你看
*s,*p电脑在执行的时候取的单元格长度是不同的。s要取2个单元格的数据,p只取一个单元格数据。(16位系统,8个二进制位一个字节)
再就是 s++,p++的步长是不一样的。

很难理解,多琢磨,慢慢理会!
adoqq_bd
推荐于2018-03-26 · TA获得超过7050个赞
知道大有可为答主
回答量:1818
采纳率:63%
帮助的人:1573万
展开全部
A)int *p; scanf("%d",p); //p是个野指针
B)int *s,k; *s=100; //s是个野指针
C)int *s,k;char *p,c; s=&k; p=&c; *p='a'; //正确
D)int *s,k; char *p,c; s=&k; p=&c; s=p; *s=1; //s=p非法,类型不同
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-04-12
展开全部
以下正确的程序段是
A)int *p; scanf("%d",p);//从语法角度来讲,正确.但是从来不会对未初始化的指针赋值,很危险
B)int *s,k; *s=100;//和上面的一样
C)int *s,k;char *p,c; s=&k; p=&c; *p='a';//正确
D)int *s,k; char *p,c; s=&k; p=&c; s=p; *s=1;//正确,但是运行的时候会弹出警告,编译器认为你将char类型的变量的值赋给int型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wyysunday
2012-04-12 · TA获得超过282个赞
知道答主
回答量:144
采纳率:0%
帮助的人:34.1万
展开全部
A
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式