c语言之指针常量、常量指针和关于scanf输入问题

这个常量指针(我们平时定义的常量)与指针常量特别容易混淆,所以下面来简单说一说:

 

 看代码:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 
  5 int main() {
  6         int a = 20,b = 30;
  7         //常量指针,指向地址的值不能更改
  8         int const *pa = &a; 
  9         //指针常量,指向的地址不能更改
 10         int * const pb = &b;
 11         printf("%d %d\n",*pa,*pb);//打印值正常打印
 12         //我想修改常量指针地址保存的值
 13         *pa = 530;//也就是把a改成530
 14         //我想修改指针常量保存的地址
 15         pb = &a;//让它指向a
 16         return 0;
 17 }

 运行结果:

 上面就在14行与15号报了错误。

下面说一下关于scanf输入问题,一般不了解一个函数,我们可以通过手册去查询:

 这个就是向内存输入数据,也就是说,我们必须加入变量的地址符号:

下面在在windows上通过vs2013查看一下内存地址变化:

代码:

上面的步骤也就是打开调试=》启动调试,程序会停在我们下的断点的位置,他会给我们打印一个内存地址,如下:

然后我们点击调试=》窗口=》内存=》跳转到这个地址,按照1列,四字节整数,带符号显示,很明显我们看到的是一个乱码:

 然后我们继续执行程序,会让我们输入一个数据,我们输入12,然后可以看到内存的变化如下:

很明显这个位置变成了12,说明scanf输入一个数据,与内存地址息息相关。

 当然,我们还可以通过那文档里面的数据来为scanf输入一个数据:

首先,我们先找到我们调试程序exe的文件位置:

然后打开cmd进入这样一个位置:

 我这里有个2.txt文本:

 我现在就死想把100给传入程序:

他只会找文档第一个数据看是否符合格式,如果不符合格式,就会打印如下乱码信息:

 下面说一下scanf输入符号格式控制问题:

像上面这种%d%d%d的输入形式,必须用空格或者tab或者enter键加以区分每一个数据。

 像下面这种数据的输入形式:

数组本身就代表这片空间的内存地址,所以不用&取地址。

下面说一下scanf格式控制语句输入:

上面scanf里面有字符串与=,这样的字符串,我们在进行赋值的时候,就必须按照原样的格式一一打印出来。 

但是这里有一个bug,提示我们出现了乱码,为什么?很明显就是字符串结尾除了问题,因为字符串结尾是\0,所以我们必须让程序能够找到结尾,从而打印出正确的字符串序列。那么这个时候,我们就想到把字符数组全部初始化为\0字符不就行了。

上面看到0就代表\0

于是修改代码:

运行恢复正常:

 下面说一下*号格式符的使用:

 这个符号放在格式符字符前面就行,代表跳过当前数据,不予赋值

代码:

注意你既然跳过就不要赋值了,我们这里给str2一个初始值m 

然后我们创建一个文本,从文本获得值:

 上面就会跳过love,而不会打印love

猜你喜欢

转载自blog.csdn.net/Pxx520Tangtian/article/details/122794458