这是一个很好的问题:
指针的本质就是存放内存地址的一个变量,对应的就是内存中某个单元格的地址。指针就像一把钥匙一样,可以进入对应锁门的那个房间。所以指针在用的时候一定要先初始化,让他指向一个具体的内存中的单元格。你想想给随便给你一把路上捡的钥匙,你能打开你想去的那个房间吗(办公室、家……)。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语言程序段解读、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)