C生万物 二 ——初识C语言

目录

常量

字符串

 转义字符

注释

选择结构

循环结构

函数

数组


前面我们介绍了变量,接下来我们看看常量,常量也有他不可替代的作用。

常量

常量的分类

  • 字面常量(字符,字符串,数字,小数等)
  • const修饰的常变量
const int num = 10;
num = 20;
//错误信息:表达式为可修改的左值

const就像一个绳索,牢牢地拴住了变量,你想改变,它就会报错。但为什么被称为常变量呢,那是因为在一个数组的元素个数必须是常量,而变量则会报错,在当前vs2019这个编译器下,使用const和不加const都会报错,说明了它其实是一个变量。很多人不理解,我以前也是,但仔细一想,const只是让这个变量无法被我们用户随便修改而已,而它在没修改前不就是个变量吗,只是相当于它没加const前你不去修改它一个道理,所以叫他常变量,很合理吧。

tip:随着C语言的发展,变长数组在C99之后是能够支持的。

  •  #define定义的标识符常量

define是实至名归的常量,而#define 的常量的用法也是固定的。

tip:<stdio.h>为std(standard)标准的 input 和output,即为标准的输入输出的头文件。

#define MAX 100
#include<stdio.h>
int main()
{
   int a = MAX;//正确
   int arr[MAX];//正确
   //MAX = 1000;错误写法
   printf("%d",a);
   return 0;
}
  • 枚举常量

枚举就是例举一些事物,例如三原色,性别等。我们以性别为例。

enum SEX 
{
   male,
   female,
   secret
};//枚举的定义
enum SEX s = male;
enum SEX s2 = secret;
//既然是常量,那它有值吗,当然。
printf("%d %d %d",male,female,secret);
//结果为0 1 2

当然了,你也可以在定义的时候为其赋初值,有趣的是,赋值后的数字是连续加1的,这也是枚举的一大特点。

大家目前了解这4种常量就行了。

字符串

要了解字符串,首先知道什么是字符,字符就是就是键盘上能敲出来的数据,那么'0'和0的区别就是一个是字符,一个是数字。而字符和字符串的打印格式也有所区别。字符是"%c",而字符串是"%s"。那么我们如何在计算机储存它们呢,于是我们引入ASCII码。使其能以二进制储存在内存中。

 字符串

由双引号引起的字符为字符串,而"a" , ""也可以称为字符串,我们可以通过调试来观察字符串在内存中的储存方式,可以发现字符串是连续储存的,而在最后一个字符的末尾,都会有一个'\0',这是什么意思呢?我们来研究一下。

 显而易见,'\0'的作用是充当了终止符的作用,没有'\0'就会产生这样的乱码。解决办法就是在arr2的'f'后加上'\0'就OK了。通过测试我们还可以发现'\0'和0是等价的

tip:字符用arr2的方式写,可以理解为用ascii码替换,本质是int,然后一个一个按顺序在数组空间内储存,再通过%s打印出来。

printf("%d",'\0');//输出0

strlen——求字符串长度

对于字符串,我们也有专门的求长度的工具,用strlen求字符串长度直接输出你输入的字符串长度,遇到 '\0' 为止。

他也有自己的头文件<string.h>,是关于字符串的。

 转义字符

刚才我们遇到的'\0'就是一个典型的转义字符,就是有其自身特殊功能的字符,常用的有

'\n'//换行符
'\0'//字符串结束标志,本质是数字0
'\t'//制表符,类似键盘上的tab功能
'\a'//报警符
\ddd//ddd表示3个8进制位数字
\xdd//dd代表2位16进制数字
printf("%c",'\123');

 将其转换成对应的ascii码值的字符,再以对应字符输出,结果为字符'S',在测试的时候发现一个有趣的现象,当我将%c改为%d时,其值也转换成对应的ascii码值,如果把这个值用%c输出,则会得到S这个结果。进而得出字符与数字可以相互转换

输出如果超出ASCII码值,输出的值则无意义

在使用的时侯需要小心辨认,切不可将普通的字符混为一谈。

那如何避免转义,输出其本来值呢,我们可以在前面加'\'的方式,使其转义成一个普通字符。

printf("%s\n","\\n");//输出\n
printf("%s\n","\"");//输出"
printf("%s\n","\?\?)");//输出??),防止?被转义成三字母词
printf("%c\n",'\'');//输出字符'

tip:不要过于纠结单个字符常量输出是"%c"还是"%s"这个问题,记住在字符串数组中用"%s",char 中用"%c"就行了。

注释

注释作为一种说明,其本身并不会参与编译,代码在 编译过程中就会删除其内容。正如我之前用'//'一样,它的作用是让作者和他人更好地理解代码内容,毕竟写代码太多有时候就容易忘了自己写的个啥了。无形之中提高了代码的可读性和保鲜性。

//单行注释
/*里面的内容为注释
     */

选择结构

选择语句就是 if     else 语句和switch case语句

int a = 1;
if(a>1)//括号表判断,0为假,非0为真,满足逻辑为真,否则为假
{
   ;
}
else printf("你好");//不满足if的条件执行else

结果输出你好,而switch case语句是处理多分支的选择语句,后面会详细说明。

循环结构

#include<stdio.h>
int main()
{
   int n=0;
   while(n<10)
   {
      printf("%d",n);
      n++;//更新循环
   }
   if (n==10)
      printf("循环结束");
   return 0;
}

我们先从上面的例子看一下循环的概念,设定n为10,当n<10时,进入循环,执行打印n的值,之后n++的意思为n自增1,这样在经过十次打印后,n的值为10不满足循环,跳出循环,执行if语句,打印循环结束。

函数

C语言中的函数是具有某种特定功能的代码块, 类似工厂中生产一件产品需要经过加工,分装,再加工等步骤,通过函数来封装,使其在一些重复的过程中大大节省时间。之后若再需使用这个函数,则只需调用一次即可,使代码不那么冗余。假如我们写个加法函数

#include<stdio.h>
int ADD(int x,int y)
{

   return x + y;
}
int main()
{
   int a,b;
   scanf("%d %d",a,b);
   int sum = ADD(a,b);//传参,sum接收返回值
   printf("%d",sum);//求和
}

之后就可以一劳永逸,调用我们的加法函数了。

数组

数组可以存放一组元素类型相同的元素, 我们可以通过数组下标来初始化数组或者确定数组的大小。

    char arr1[] = { 'a','b','c', '\0'};//下标默认4
	char arr2[5] = {0};//不完全初始化,剩余元素自动放0
	char arr3[4] = "ac";
	char arr4[] = { 0 };//下标为默认为1

那下标是什么东西呢,我们如果想要查询数组中的某个元素,就需要用到下标,而语法规定下标始终从0开始的,这点也要牢记。例如查找下面数组第三个数组,用下标为2就能找到这个下标对应的值。

    int arr[] = { 1,2,3,4,5,6 };//整型数组
	printf("%d", arr[2]);

在访问数组的时候,有一点需要特别注意,输入的下标不能等于或超过其本身最大元素,这种行为被称为非法访问。这就好比你去非法入侵民宅一个道理,所以请不要这样做哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小C您好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值