今天我将继续变量与常量的相关知识点,以及我个人对这些知识点的一些理解。
在上一篇中,我以问答的形式讲述了变量与常量,并且运用了很大篇幅在说明变量。今天我将把在视频课中鹏哥提到的几个问题再归纳总结一下,之后继续介绍常量的相关内容。
1.有些朋友在创建新项目后可能会不小心把解决方案资源管理器这个窗口给关掉了,如下图:
遇到这个情况,我们不需要把编译器关掉重新启动,这时只需要如下操作即可打开窗口:
视图—>解决方案资源管理器—>窗口就可以重新打开了,如下图:
接下来就可以正常创建源文件了
2.我们正常创建源文件后界面会是光秃秃的一片,如下图:
这里要介绍的就是上一篇有讲到的_CRT_SECURE_NO_WARNINGS这行代码如何可以添加进编译器中不需要每次创建新项目后都要重复输入,以及这行代码的作用。
首先我先介绍如何添加,按如下步骤进行操作:
找到VS的安装路径—>在文件夹中找到"newC++file.cpp"这个文件—>打开文件(记事本)—>添加代码
“#define _CRT_SECURE_NO_WARNINGS 1”—>保存后关闭记事本即可完成。
如下图:
安装路径及文件
打开文件添加代码
这里我遇到了一种情况,在保存的时候电脑显示需要管理员权限,如下图:
保存之后到这一步点击是,然后我这边出现了下图所示情况:
如果各位遇到的这个情况,可以按照第二种方法
先下载按照“Notepad++”这个工具,然后在打开"newC++file.cpp"时点击“Edit with Notepad++”,如下图所示:
打开文件后输入代码“#define _CRT_SECURE_NO_WARNINGS 1”,点击保存即可。这里在保存时系统可能会提示是否要用管理员模式启动Notepad++,点击是即可,如下图所示:
这时电脑会以管理员身份重新打开这个程序,如下图所示:
这里我们只需将重新打开的文件保存即可,可以使用快捷键Ctrl+S进行保存。
接下来我再创建新的源文件,这时界面第一行就出现了“#define _CRT_SECURE_NO_WARNINGS 1”这行代码,如图:
看到这里,大家跟着步骤一步步操作应该都能成功的,有遇到新的问题的话,欢迎评论留言哦!!!
接下来我来介绍一下这行代码的作用,这里我要介绍几个函数
scanf——输入函数
strcpy——字符串复制函数
strlen——计算字符串长度的函数
strcat——字符串连接函数
...
这些函数都是C语言给我们提供的库函数,但是这些库函数在传统意义上来讲都是不安全的,通过代码
“#define _CRT_SECURE_NO_WARNINGS 1”,即可解决这个问题,编译器会自动忽略这些函数的不安全警告,函数也能正常运行。
这里要差一嘴,在VS编译器中针对于这些不安全的函数,VS编译器提供了像“scanf_s/strcpy_s...”这样的安全的函数,这些函数在VS编译器中是可以使用的,但是这些函数在其他的编译器(如gcc编译器)中可能无法识别,也就是说,这些函数不具备跨平台性,或者说是缺乏可移植性,所以不建议大家使用这些函数。
下面我将继续介绍常量相关的知识点。
我们先回顾一下常量的定义——可以简单的理解为不变的量就是常量。
常量分为4类:字面常量、const修饰的常变量、#define定义的标识符常量、枚举常量。
字面常量可以理解为是直接能够写出来的常量,如“3”、“15”、“1.23”等这些可以直观写出来的数值。
const修饰的常变量//const——常属性,可以简单的理解为,当一个变量前面添加const之后,这个变量将变为常量,如下图
这里局部变量a在定义为整型类型后,第一次打印将赋予的数值“1”正常打印出来,第二次则将赋予的数值“2”正常打印,如果我们在第一次打印前加一个const,结果又会如何呢?如下图:
这里我们可以看到系统报错,报错原因是表达式必须是可修改的左值,而左值是const对象,也就是const的对象是不可修改的,意思就是说此时变量a变成了一个常量,这种就是const修饰的常变量。
感兴趣的朋友可以自己操作一下,代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
const int a = 1;
printf("%d\n", a);
a = 2;
printf("%d\n", a);
return 0;
}
这里有朋友可能就会有疑惑,你说常量就是常量,变量就是变量,为什么你这里要说是常变量呢?
这里我们可以简单的理解为被const修饰过的变量,他只是具有了常量的属性,但是它的本质还是变量。就好比一块猪肉,我可以把它做成红烧肉、可以做成蚂蚁上树,但是你能说他做成红烧肉的时候就是猪肉,做成蚂蚁上树的时候就是蚂蚁肉了吗?显然是不可能的,只不过它是被蚂蚁上树这个菜名给修饰了,它的本质还是猪肉。这样说明大家就能理解了吧。
下面我们来证明一下常变量的变量属性,需要借助一个新的知识点——数组arr[],代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int arr[10] = { 0 };//这里要注意前后的括号别搞错了,前面是[],后面是{};
return 0;
}
这里咱们定义一个整型数组,这时代码能正常运行,如下图:
下面我先定义一个变量a=10,然后再来定义数组,那结果又会如何呢?如下图:
这里大家可以看到系统报错在第9行,也就是我们定义数组的这一行,他这提示的是以下几点:
1.必须含有常量值;
2.因输入常量表达式;
3.不能分配常量大小为0的数组。
由此可知,这时变量是不能定义数组的,那我们再变量的前面加一个const,它能不能解决这个问题呢?如下图所示:
这里我们可以看到,系统报错内容还是这三点,那说明这时经过const修饰过的变量a并没有变成一个常量,它仅仅只是具有了一个常量属性而已,本质上还是变量。所以我们把经过const修饰过的变量称为常变量。
对今天的内容做个总结,首先我介绍了几个问题及其解决方案——1.不小心把解决方案资源管理器这个窗口给关掉了,2.在运用scanf/strcpy...等C语言提供的库函数时VS编译器报错的问题,3.如何将代码“#define _CRT_SECURE_NO_WARNINGS 1”永久添加到咱们的VS程序中。
朋友们,下次你们遇到这些问题时知道如何处理了吗?
接下来我介绍了常量的分类——分为“字面常量、const修饰的常变量、#define定义的标识符常量、枚举常量”这四类;
随后我继续介绍了什么是字面常量,什么是const修饰的常变量;
最后我又通过例子给大家证明了const修饰的常变量的常属性与其变量的本质。
今天的分享就到这里,后面我会继续分享我自己在学习过程中的感受,感谢大家的阅读,我们下一篇再见。