这个常量指针(我们平时定义的常量)与指针常量特别容易混淆,所以下面来简单说一说:
看代码:
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