初识C语言
Posted 很冷.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识C语言相关的知识,希望对你有一定的参考价值。
目录
一、变量的使用
1、 在叙述变量的使用之前先说一个C语言中的输入函数 scanf
(1)scanf 函数是C语言提供的一个输入函数
scanf 函数的使用格式:
这里使用输入整数举例说明
- 如果要输入两个整数,双引号中就要写两个%d, 输入n个整数就写n个%d
- %d与%d之间可以用空格隔开,也可以用逗号隔开
- 用空格隔开:scanf("%d %d",&num1,&num2);
- 用逗号隔开:scanf("%d,%d",&num1,&num2);
- & --->取地址,使用scanf函数输入数据时要在变量前加取地址符&
- 双引号引起来的内容[ "%d,%d" ]叫做格式控制符。在定义时使用什么格式,那么在输入数据的时候就要使用该格式来输入数据。
- 例如:
- %d与%d之间使用空格隔开,那么在控制台中输入的两个数据之间也要用空格隔开;
- %d与%d之间使用逗号隔开,那么在控制台中输入的两个数据之间也要用逗号隔开;
(2)简单说明一下在VS这个集成开发环境中使用scanf函数报错的问题
如果在VS中使用scanf函数出现报错,在给出的报错信息中有两种解决方法:
VS中使用scanf函数的报错信息:
'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
方法一:在源文件的第一行加上 #define _CRT_SECURE_NO_WARNINGS 1
#define 后面的内容就显示在报错的信息中,可以直接在报错的信息中复制这段文字。后面的1是随便写的一个值,加不加都不影响使用。(建议尽量去复制 _CRT_SECURE_NO_WARNINGS这段文字,自己用键盘打出来有可能会出错)
注意:#define _CRT_SECURE_NO_WARNINGS 1 这句一定要放在代码的第一行。放在其他位置就不起作用了。
补充:每次写代码的时候都要加 #define _CRT_SECURE_NO_WARNINGS 1 可能会比较麻烦,可以在电脑中搜索newc++file.cpp这个文件(这个文件是在你安装的VS的的路径下),搜索到这个文件以后,将这个文件拖到桌面中(文件原路径下不可以编辑修改)再进行编辑将#define _CRT_SECURE_NO_WARNINGS 1 这句话放到这个文件中然后保存(也可以将经常用到的头文件保存在这个文件中),保存完以后再将这个文件拖回到原来的路径下,这样每次在VS中写代码的时候第一行都会默认加上这句话。
【因为此文章是讲述C语言的知识点,VS的操作内容不会详细讲述。这里只是进行了一些文字描述,如果有不清楚的地方可以百度查看一下详细的操作,也可以私信我。】
方法二:在报错的信息中提到可以使用scanf_s 来代替scanf函数(不推荐使用这种方法)
scanf_s函数是vs编译器提供的一种函数,不是C语言自己的,在其他的编译器(gcc,clang......)下没有scanf_s函数,其他编译器也不认识这个函数,当你在代码中使用了scanf_s函数,你的代码在其他编译器下就没法正确的编译,这样就降低了代码的跨平台性。所以建议写代码时使用标准C提供的功能和函数。
如果好奇想使用scanf_s这个函数,一定要研究清楚它的使用方法再去使用,它的使用方法与scanf函数是有区别的,这里就不再过多的叙述。
2、变量的使用:需要变量就创建一个变量然后使用这个变量就可以了。
这里给出两整数相加的例子:
//stdio.h 标准输入输出头文件
#include<stdio.h>
//scanf 是C语言提供的一个输入函数
//& --->取地址
int main()
{
//两个整数相加
int num1 = 0;
int num2 = 0;
int sum = 0;
//输入两个值
scanf("%d %d", &num1, &num2);
//计算
sum = num1 + num2;
//输出
printf("%d\\n", sum);
return 0;
}
运行结果:
也可以将sum在定义的时候直接使用:
#include<stdio.h>
int main()
{
//两个整数相加
int num1 = 0;
int num2 = 0;
//输入两个值
scanf("%d %d", &num1, &num2);
//计算
int sum = num1 + num2;
//输出
printf("%d\\n", sum);
return 0;
}这种写法在老一点的编译器中编译会报错。
C99标准之前有一个规定:变量要创建在当前代码块的最前面!
C99之后的语法中就支持了:变量在哪里使用就在哪里定义!
二、变量的作用域和生命周期
1、作用域:
作用域是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效、可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。
如果去点47行的代码,就可以输出变量b的值
局部变量a的作用域是在外面的 { } 内
- 全局变量的作用域是整个工程。
2、生命周期:
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
作用域描述的是变量的使用范围,生命周期描述的是一个时间段。
作用域与生命周期是两个不同的概念,二者只是有关联。
我在另一篇文章中也讲述了生命周期与全局变量,有兴趣的老铁可以去看一下。
三、常量的进一步了解
C语言中的常量分为以下以下几种:
- 字面常量
- const 修饰的常变量
- #define 定义的标识符常量
- 枚举常量
1、字面常量
直接用键盘打出来的就是字面常量:
#include<stdio.h>
int main()
{
100;//整型常量
3.14;//浮点类型常量
'a';//字符常量
"abcd";//字符串常量
return 0;
}
2、const 修饰的常变量
一个变量没有被const修饰,那这个变量的值是可以改变的:
一个变量被const修饰后,那这个变量的值就不可以被修改:
const的用法:
当一个变量不想被别人修改,就可以在这个变量前面加const。
虽然加上const以后变量不能被修改,但是本质上它还是一个变量。
3、#define 定义标识符常量
#define 定义的标识符常量大写小写都可以,一般习惯大写
4、枚举常量(这里只是简单了解一下,后面还会讲述)
枚举就是一一列举
- 生活中有很多值都是可以一一列举的(比如性别:男、女、保密)
- 有些值不适合一一的列举(比如工资)
枚举是要定义后才可以使用:
//定义枚举类型
enum Sex
{
//枚举类型的可能取值---就是枚举常量
MALE,
FEMALE,
SECRET
}; //这个;必须要加
int main()
{
//枚举常量的使用
enum Sex s = MALE;
//打印枚举常量
printf("%d\\n", MALE);
printf("%d\\n", FEMALE);
printf("%d\\n", SECRET);
return 0;
}
枚举常量不可以直接修改它的值
枚举常量的默认是从0开始,依次向下递增1
四、字符串
C语言中是没有字符串类型的,在C语言中由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
例如:
"Hello World\\n"
"abc";//字符串
"a";//字符串
"";//空字符串
1、字符串的定义:
char arr1[] = "abc";
char arr2[] = { 'a','b','c' };
2、输出字符串:
C语言中使用%s这个格式符输出字符串
3、打印字符数组
为什么这个两个字符数组打印出来的内容不一样呢?
接下来我们来看一下这两个字符数组在内存中的存储:
从字符数组在内存中的存储可以发现arr1最后多了一个'\\0'。
字符串的末尾其实隐藏一个'\\0','\\0'是字符串的结束标志arr1在打印的时候遇到了'\\0'就结束了。而arr2是一个字符一个字符放进去的,如果不放'\\0'这个字符那么arr2是找不到结束标志的,所以arr2在打印出abc后不会停下来,直到在某个位置找到了'\\0'才会停下来,所以abc后面就输出了一些随机值(乱码)。
如果想让arr2也正常输出,只要在字符'c'后面加上'\\0'。
我们再来看一下这两个字符数组在内存中的存储:
由此可以得出:'\\0'对字符串是特别重要的!
字符串的结束标志是一个 \\0 的转义字符。在计算字符串长度的时候 \\0 是结束标志,不算作字符串内容。
4、strlen(string length)函数 :求字符串长度的函数
在使用strlen这个函数的时候要引入#include<string.h>这个头文件
#include<stdio.h>
#include<string.h>
int main()
{
//使用strlen这个函数求字符串的长度
int len = strlen("abc");
printf("%d\\n", len);
return 0;
}
运行结果:
- 接下来使用strlen函数计算两个字符数组的长度
#include<stdio.h>
#include<string.h>
int main()
{
//可以把字符串放在字符数组中
char arr1[] = "abc";
char arr2[] = { 'a','b','c' };
//使用strlen函数计算字符数组的长度
printf("%d\\n", strlen(arr1));
printf("%d\\n", strlen(arr2));
return 0;
}
运行结果:
输出结果说明:
- arr1字符数组中的字符串末尾隐藏了一个'\\0',strlen在计算字符数组长度的时候只计算'\\0'之前的数,所以输出3。
- arr2字符数组中是存放了3个字符,这些字符中也没有'\\0'这个字符,所以strlen在计算字符数组长度时就会输出一个随机值(这个值有可能是3,9,18......等任何值)。
在arr2字符数组中放一个'\\0'字符再输出
虽然在'\\0'字符后面又加了两个字符,但是strlen在计算字符数组长度时只计算'\\0'前面的字符!
五、转义字符
转义字符就在转变原来的意思
转义字符 | 释义 |
---|---|
\\? | 在书写连续多个问号时使用,防止他们被解析成三字母(现在基本用不到了) |
\\' | 用于表示字符常量' |
\\" | 用于表示一个字符串内部的双引号 |
\\\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\\a | 用警告字符,蜂鸣 |
\\b | 退格符 |
\\f | 进纸符 |
\\n | 换行 |
\\r | 回车 |
\\t | 水平制表符 |
\\v | 垂直制表符 |
\\ddd | ddd表示1~3个八进制数字。例如:\\123 转换后就是S |
\\xddd | dd表示2个十六进制数字。例如:\\x30转换后就是 0 |
#include<stdio.h>
int main()
{
printf("hehenhehe");
printf("\\n------------\\n");
printf("hehe\\nhehe");
return 0;
}
运行结果:
\\n就是一个转义字符(\\n就是一个换行);\\0也是一个转义字符
打印一个文件路径:
输出几个转义字符看一下代码执行结果:
重点说一下 \\ddd 和 \\xdd(这里的x只能是小写)这两个转义字符
- \\ddd,ddd表示1~3个八进制数字
\\123为什么是S呢?
\\123其实是将八进制的123转换成了十进制的83(计算过程:1*8^2+2*8^1+3*8^0=83)
83作为ASCII码值所代表的字符就是S,所以\\123会打印出S
补充:八进制是0~7,所以八进制数中最大的数是7。例如: \\811、\\181、\\178这些都是错的
- \\xdd,dd表示2个十六进制数字
\\x30转换后为什么是 0呢?
\\x30其实是将十六进制的30转换成了十进制的48(计算过程:3*16^1+0*16^0=48)
48作为ASCII码值所代表的字符就是0,所以\\x30会打印出0
补充:十六进制数是:0~9与a~f共同组成
再回到一开始的打印一个文件路径:
#include<stdio.h>
int main()
{
//打印一个文件路径
printf("E:\\\\2021_10_17\\\\test.c\\n");
return 0;
}运行结果:
六、注释
C语言有两种注释方式:
- 单行注释: //
- 多行注释: /* */
- // 这种是C99之后引入的注释方式 ----->C++的注释风格
- /* 这种是C99之前C语言的注释方式 ---->C语言的注释风格*/
#include<stdio.h>
int main()
{
//int a = 10; //单行注释
//int b = 20;
/* 多行注释
printf("Hello World\\n");
printf("Hello World\\n");
printf("Hello World\\n");
printf("Hello World\\n");
printf("Hello World\\n");
printf("Hello World\\n");
*/
return 0;
}
补充:多行注释的缺陷是不支持嵌套注释
注释的作用:
- 代码比较复杂最好加上注释,时间久了有助于自己阅读代码,加上注释也有助于别人阅读你的代码。
- 代码暂时不用的时候,也可以注释掉。
不要过分注释,注释不要写的太过于详细!
七、总结
C语言中有许多有趣的东西,可能看着代码会觉得有些枯燥,看到一大堆文字会看不下去。
编程的学习在于多动手多写代码这样才会有所收获。
一开始写代码肯定会出现很多的问题,只有不断的出错不断地改错自己才会进步。
以上是关于初识C语言的主要内容,如果未能解决你的问题,请参考以下文章