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

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

这是一个很好的问题:

指针的本质就是存放内存地址的一个变量,对应的就是内存中某个单元格的地址。指针就像一把钥匙一样,可以进入对应锁门的那个房间。所以指针在用的时候一定要先初始化,让他指向一个具体的内存中的单元格。你想想给随便给你一把路上捡的钥匙,你能打开你想去的那个房间吗(办公室、家……)。int p;只是定义了一个指针,他可以指向一个整形的变量。但是你没有具体的告诉他指向那个变量(或者这个变量的地址),那么这个指针就是一个游离态的指针。这是很危险的。

你想想内存中某些地址上方的是 *** 作系统的数据,或者是其它程序正在使用的数据,如果不指定指针指向一个合法的安全的地址,你能随便用指针去修改某个单元格中的值吗?所以一个钥匙一定要指定了开哪扇门才有用!

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

#include "stdioh"

#include "conioh"

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++的步长是不一样的。

很难理解,多琢磨,慢慢理会!

//该程序作用在于 找出 666~777之间的质数

void main()

{

int i,n=0,j;

for (i=666 ;i<=777 ;i++)

{

for (j=2 ;j<=sqrt((float)i) ;j++)//j的范围是 2~sqrt(i)之间的整数值

if (i%j==0) break; //如果 i能整除2~sqrt(i)之间的某个数,说明它不是质数,所以break

if (j>sqrt((float)i)) //这个条件成立的时候,只有if(i%j)==0始终没有成立的前提下,for循环退出时,j++任然会执行一次,所以才会 j>sqrt(i)

{

n++; //质数的个数

printf("第%d个 = %5d \n",n,i);

}

}

printf("n = %5d \n",n);

system("pause");

}

以上就是关于以下正确的程序段是 A)int *p; scanf("%d",p); B)int *s,k; *s=100; C)int *s,k;char *p,c; s=&k; p=&c;全部的内容,包括:以下正确的程序段是 A)int *p; scanf("%d",p); B)int *s,k; *s=100; C)int *s,k;char *p,c; s=&k; p=&c;、C语言程序段解读、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9812654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存