草庐IT

初步了解c语言(二)

June-Frost 2023-12-16 原文

注:此篇文章仅限初步了解,本小白后续会持续进行详解。

目录:

变量的使用

  我们通过加法来理解它的使用。

#include<stdio.h>
int main()
{
	int num1 = 0;
	int num2 = 0;
	//给num1和num2赋予两个新的值
	scanf("%d %d", &num1, &num2);
	//求和
	int sum = num1 + num2;
	printf("sum = %d\n", sum);
	return 0;
}

📙一些简单解释:
1.scanf和printf是库函数,即c语言的编译器提供的现有并可以直接使用的函数函数,在使用这两个库函数时,需要包含头文件<stdio.h>
2.scanf函数的作用:输入数据——将数据从键盘读取到内存中。
  printf函数的作用:输出数据——数据从内存输出到屏幕上。
3.


变量的作用域和生命周期

  作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域.

📗简单的来讲,变量哪里可以用,哪里就是它的作用域。

  局部变量作用域示意图:


全局变量作用域:
🌟在任意地方都可以使用!!!

通过两个代码来说明这个问题:


1.一个文件内:

#include<stdio.h>
int a = 10;
//函数测试
void test()
{
	printf("第三个:%d\n", a);
}
int main()
{
	printf("第一个:%d\n", a);
	{
		printf("第二个: %d\n", a);
	}
	test();
	return 0;
}

❗️结果如下:

我们可以看到,在一个文件内,全局变量在哪里都可以使用。


  1. 多个源文件:
    例如:
    第1个文件:
int num = 10;

      第二个文件:

#include<stdio.h>
//声名外部符号。
extern int num;
int main()
{
	printf("%d\n", num);
	return 0;
}

❗️结果如下:

📙通过这两个例子,我们可以看出,全局变量的作用域是整个工程
正是因为可以在整个工程使用,所以会变得不安全,要尽可能避免使用。


  生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。

局部变量的生命周期示意:

全局变量的生命周期:
  main函数的第一行开始运行直到结束,全局变量都可以使用。

📙所以:全局变量的生命周期就是整个程序的生命周期


常量

c语言中的常量有以下几种:

  • 字面常量
  • const 修饰的常变量
  • #define 定义的标识符常量
  • 枚举常量

📘 字面常量:
例如: 整数 1; 小数 1.5; 字符 ’a’ ; 字符串 “abcde”


📘const 修饰的常变量:
例:

#include<stdio.h>
int main()
{
	int num = 10;
	printf("%d\n", num);
	num = 100;
	printf("%d\n", num);
	return 0;
}

❗️结果:

现在我们将num变量前面加上const 。
例:

#include<stdio.h>
int main()
{
	const int num = 10;
	printf("%d\n", num);
	num = 100;
	printf("%d\n", num);
	return 0;
}

❗️结果:无法编译运行。

❓ 原因是什么呢❓

🌟const 修饰的变量使得变量具有了常属性——不可被改变! 但是,这个本质上还是 变量


📘 #define 定义的标识符常量
例:

🌟在预编译阶段,其实就会将 num 直接替换为10,ch替换为‘a’,num1替换为1.0f


📘枚举常量

枚举就是 一个一个列举 。

例如 : 列举性别,列举血型等等。 所以 c 语言引入关键字enum

enum SEX
{
	//一一列举性别的可能
	MAX,
	FEMALE
};

此处细节会在后期详细解释!


字符串

字符,简单的来说,键盘上可以敲出来的任何符号都是字符。而字符串,其实就是一串字符。例如:”Hello World“ 。

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

注意:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
例:

int main()
{
	char arr[] = "abcdef";
	return 0;
}

  监控一下数组,可以发现有一个\0.

  其实这个\0是字符串的结束标志。

  用代码解释这个标志:

#include<stdio.h>
int main()
{
	char arr1[] = { 'a','b','c','d' };
	char arr2[] = "abcd";
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	return 0;
}

❗️结果如下:

❓对于这种现象如何产生的呢?


  而且,在使用strlen(一个库函数,用来计算字符串长度,从给定的地址计数,直到遇到\0才停止)计算字符串长度时,对于上述arr1 的情况,由于无法确定\0的具体位值,所以结果会是随机值。


转义字符

转义字符释义
\ ?在书写连续多个问号时使用,防止他们被解析成三字母词
\ ’用于表示字符常量’
\“用于表示一个字符串内部的双引号
\ \用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\t水平制表符
\v垂直制表符
\dddd d d表示1~3个八进制的数字。 如: \130 表示字符X
\xddd d表示2个十六进制数字。 如: \x30 表示字符0

一些简单的解释:计算机可以识别二进制,由于字符的不方便储存,所以对字符进行了编号,例如‘a’ —— 97 等等,这种编码就是ASCII 编码,编号就是ASCLL码值。

例如:printf("%c", '\130');
此时130是八进制,转换为十进制是88,对应ASCLL表,可见结果为 X。


注释

  1. 代码中有不需要的代码可以直接删除,也可以注释掉
  2. 💫代码中有些代码比较难懂,可以加一下注释文字

// 注释
注: 以//开头的注释风格是属于c++的,在c99标准之后,也进行了引入。

/* int a = 0; */
注:这种形式(/* */)是c语言的注释风格。

c语言的注释风格是不可以嵌套的,但是c++的注释风格可以。


💞结尾

之后的内容,本小白会持续更新,刚开始写博客,有不足的地方还请各位大佬多多指正,非常感谢!

有关初步了解c语言(二)的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  5. ruby - 了解在 Ruby 中与 lambda 一起使用的 inject 行为 - 2

    我经常将预配置的lambda插入可枚举的方法中,例如“map”、“select”等。但是“注入(inject)”的行为似乎有所不同。例如与mult4=lambda{|item|item*4}然后(5..10).map&mult4给我[20,24,28,32,36,40]但是,如果我制作一个2参数lambda用于像这样的注入(inject),multL=lambda{|product,n|product*n}我想说(5..10).inject(2)&multL因为“inject”有一个可选的单个初始值参数,但这给了我......irb(main):027:0>(5..10).inject

  6. ruby-on-rails - 如何测试自己对 Ruby/ROR 的了解? - 2

    是否有self验证的问题列表。看着那个,我可以确定我知道。我应该复习一下。在学习的过程中,我列了一个这样的list,但它只包含我在某处听说过的项目。我需要一段时间才能找到新的东西。 最佳答案 以下是针对ruby​​和Rails的一些测试列表。证书名称:RubyonRails谁提供:oDeskIncorporation认证费用:免费网站:https://www.odesk.com/tests/985?pos=0证书名称:RubyonRails提供者:Techgig.com(TimesBusinessSolutionsLimited(T

  7. ruby-on-rails - 了解 "attribute_will_change!"方法 - 2

    我想覆盖store_accessor的getter。可以查到here.代码在这里:#Fileactiverecord/lib/active_record/store.rb,line74defstore_accessor(store_attribute,*keys)keys=keys.flatten_store_accessors_module.module_evaldokeys.eachdo|key|define_method("#{key}=")do|value|write_store_attribute(store_attribute,key,value)enddefine_met

  8. ruby - 如何保持我不常用的编程语言技能 - 2

    关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby​​-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby​​有很大不同。由于我与ruby​​之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?

  9. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  10. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

随机推荐