目录
续上茶水
书接上回
精彩内容
继续由俺细说
常量
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下几种:
·字面常量
·const 修饰的常变量
·#define 定义的标识符常量
·枚举常量
这四类呢,我会仔细的给各位客官讲述,让各位客官能够更好的理解
1.字面常量
//1.字面常量
int main()
{
int a = 100;
char ch = 'c';
"abcdef";//字符串常量
3.14;
return 0;
}
-
2. const修饰的常变量
(书讲到这里,有些看官已经纳了闷,这常量就是常量,变量就是变量,这常变量是个上面古怪玩意儿?)
我们先看这样一段代码:
int main()
{
int n = 10;
printf("n=%d\n", n);//10
n = 20;
printf("n=%d\n", n);//20
return 0;
}
这段代码相信客官们一眼看破结果:
很显然n是一个变量 ,它是可以被改变的。
那有看官就会说了,小赛毛,这const修饰的常变量是什么概念呢?
各位客官请注意,咱们醒木一拍,接下来看老夫展示
当我现在在n定义的前面加上一个const,这个时候再来编译我刚刚的代码:
//2. const修饰的常变量
int main()
{
const int n = 10;
printf("n=%d\n", n);//10
n = 20;
printf("n=%d\n", n);//20
return 0;
}
各位看官请注意,这个时候是不是具有了一种保护,对不对
这个时候我想告诉大家的是const一旦去修饰这个n,n就具有了一定的常属性,常属性的意思就是它就不能被改变了,现在已经明显的看到了它不能被改变,具有了常属性。
但是呢,虽然它具有这种常属性,但它本质上还是一个变量,它不是常量,它没有变成彻底的常量,它只是具有了常属性。那我们怎么证明这么一回事呢?
我再来给大家举一个栗子:
我们先写这样一段代码:
int main()
{
int arr[10] = { 0 };
return 0;
}
显而易见代码是没有问题的,接下来我们对代码进行修改;
int main()
{
int n = 10;
int arr[n] = { 0 };
return 0;
}
我们发现编译器提示了这样的错误。那有看官就说了,小赛毛你给它前面加个const试试
int main()
{
const int n = 10;//这里的n具有常属性,但是本质上是一个变量
int arr[n] = { 0 };
return 0;
}
各位看官应该也发现了编译器报错:这里的n具有常属性,但是本质上是一个变量。
老夫呢,突然想到一个东西,本来想着以后讲给大家伙,现在兴致一来,就让老夫提前说上那么一点。
int main()
{
int arr[10] = { 0 };//C99之前的语法
return 0;
}
在C99标准之前的语法,就是数组这里必须要给上常量。
在C99标准中增加一个变长数组的概念,这里指定数组大小的时候,可以使用变量了。
3.#define 定义的标识符常量
接下来呢,我将举一些栗子给大家来讲述以下#define 定义的标识符常量是怎么一回事儿:
#define MAX 100
int main()
{
int m = MAX;
printf("%d\n", m);
return 0;
}
如果,这里打印m的值为100,是不是就说明 MAX 的值传递给m了?CTRL+f5代码走起来,我们一看究竟:
果然,这个地方,是不是就相当于我们把100放到m里面去了。
当然各位客官也可以直接去打印MAX。
这个时候呢,有些看官就按捺不住了,说我在main函数里面把这个MAX改改行不行呢?那我们来试试:
#define MAX 100
int main()
{
//MAX = 101;//err
int m = MAX;
printf("%d\n", m);
return 0;
}
这个时候编译器就开始报错了,刚才我们说什么来着?常量不可以被修改!欸,对!常量不可以被修改,各位看官要是非要去修改,那不就错了嘛~
4.枚举常量
各位看官已经了解了上述三种常量,那就由老夫再来给大家伙讲述一下枚举常量,那么什么叫做枚举常量呢?我们不妨再举个栗子:
光从字面上说起,我们是不是会感觉枚举就是一一列举
//枚举就是一一列举
//枚举是C语言提供的一种自定义类型的方法
什么意思呢?
比如生活中:
//性别:男,女,保密
//三原色:red green blue
enum Sex
{
MALE,
FEMALE,
SECRET
};
//enum COLOR
//{
// RED,
// GREEN,
// BLUE
//};
int main()
{
printf("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECRET);
return 0;
}
枚举常量是有值的,而且值是整形
这时候可能又有客官要说了,那它的值我们可不可以改呢?不妨我们来一试便知:
我们可以看出编译器提示错误,所以呢,MALE是常量。希望各位客官可以理解~
字符串+转义字符
1.字符串
int main()
{
char arr1[] = "abc\0def";
char arr2[] = { 'a','b','c','d','e','f', '\0'};
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
代码运行起来我们看一下结果:
在这里再一次显示了 \0 作为结束标志的重要性!
2.转义字符
//转义字符 - 转义就是转变它的意思
现在呢我想去打印C盘下test文件夹下的test.c文件:
int main()
{
printf("c:\test\test.c");
return 0;
}
我们发现结果是这样的,这是怎么了呢,为什么和我们预想的不一样呢?
原因很简单,在这里 \t 被认定为一个转义字符
我们再来看一段代码:
int main()
{
/*printf("c:\test\test.c");*/
printf("abcndef");
printf("abc\ndef");
return 0;
}
代码的运行结果为:
为什么会出现这种情况呢?
因为在n的前面加上\,就形成了换行符!
//转义字符 - 转义就是转变它的意思
int main()
{
printf("c:\\test\\test.c");
printf("abcndef");
printf("abc\ndef");
//三字母词 -
//??) -> ]
printf("(are you ok\?\?)");//(are you ok]
printf("%c\n", 'a');
printf("%c\n", '\'');
printf("%s\n", "abc");
printf("%s\n", "a");
printf("%s\n", "\"");
printf("\a\a\a\a\a");
printf("%c\n", '\135');
64+24+5 =
printf("%c\n", '\x42');
return 0;
}
既然我们讲到了strlen,那老夫就不得不再讲一下这段:
int main()
{
char arr1[] = "abcdef";
char arr2[] = { 'a','b','c','d','e','f' };
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
return 0;
}
CTRL+f5我们来看一下运行结果:
我们画图来分析一下:
注释
int main()
{
/*
int b = 20;
*/
/*C语言风格注释
int Sub(int x, int y)
{
return x-y;
}
*/
int a = 10;//创建一个整型变量,并赋值10
//C++注释风格
return 0;
}
但是各位客官注意咯,C语言的注释风格是有一定缺陷滴~额滴个亲娘乐这玩意有啥缺陷快给我一一道来。
- C语言风格的注释 /*xxxxxx*/
- C++风格的注释 //xxxxxxxx
选择语句
int main()
{
int input = 0;
printf("跟着小赛毛游历C语言\n");
printf("你要好好学习嘛?(1/0):\n");
scanf("%d", &input);
if (1 == input)
{
printf("学好C语言,进入新大陆!\n");
}
else
{
printf("回家卖烤红薯\n");
}
return 0;
}
CTRL+f5我们来看一下运行结果:
循环语句
有些事必须一直做,比如我日复一日的练功说书,比如客官们,日复一日的听我说书喝茶然后一键三连~
int main()
{
int time = 0;
printf("听小赛毛说书\n");
while (time < 23333)
{
printf("听书,喝茶,一键三连%d次\n",time);
time++;
}
if (time >= 23333)
{
printf("获得小赛毛真传,有资格进入下一阶段听书,喝茶,一键三连\n");
}
return 0;
}
CTRL+f5我们来看一下运行结果:
其实呢,各位客官是否发现我们生活中的事情无非就三种情况:
顺序 选择 循环
函数
int main()
{
int sum = 0;
int n1 = 0;
int n2 = 0;
//输入
scanf("%d%d", &n1, &n2);
//计算求和
//sum = n1 + n2;
// 函数的方式来实现
sum = Add(n1, n2);
//输出
printf("sum=%d\n", sum);
return 0;
}
各位客官有没有发现,这里的函数其实很想一个工厂:
函数的实现:
Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
这个代码呢,其实有点啰嗦,那我们怎么给它简化呢?看好啦,老夫只此展示一遍:
Add(int x, int y)
{
return x + y;
}
这个时候,CTRL+f5我们来看一下运行结果:
数组
int main()
{
//int a = 10;
//int b = 11;
//int c = 12;
//...
//数组 - 一组相同类型元素的集合
int arr[10] = {10,11,12,13,14,15,16,17,18,19};
//0 1 2 ...
int i = 0;
while (i < 10)
{
scanf("%d", &arr[i]);
i++;
}
//i=10
i = 0;
while (i < 10)
{
printf("%d ", arr[i]);
i++;
}
/*printf("%d\n", arr[5]);*/
//char ch[] = { 'a', 'b', 'c', 'd', 'x' ,'y'};
return 0;
}
操作符
//int main()
//{
// //int c = 10 / 3;//3...1
// //printf("%d\n", c);
// float c = 10 / 3.0;//int double-> double 3.333333
// printf("%f\n", c);
//
// //float %f
// //double %lf
//
// return 0;
//}
//
//int main()
//{
// int a = 10 % 3;//10/3...1
// printf("%d\n", a);
// return 0;
//}
//
int main()
{
int a = 10;//初始化
a = a + 10;//1
a += 10;//2
a -= 2;
a = a - 2;
// a = 20;//赋值
return 0;
}
欲知后事如何 且听我下回分说
(江湖游历在外,还要多多仰仗各位衣食父母,方便的话点个赞,点个关注呗,谢谢你嘞,客官慢走)