2021-06-06C语言初阶(新手必看)

Posted KD大毛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-06-06C语言初阶(新手必看)相关的知识,希望对你有一定的参考价值。


前言

由于昨天我简单的写了一些自己学习C语言过程中我自己觉得有必要记录下来的东西,我发现我所要注意的东西远远不止那些,所以我今天决定在写一期博客来梳理一下知识点。这一期主要是写的是我所碰到的问题、我的疑问,有关于字符串、数组、局部变量等问题。

变量

局部变量

局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。
局部变量的生存期:从函数被调用的时刻算起到函数返回调用处的时刻结束。
局部变量的作用域是定义该变量的函数或定义该变量的复合语句。也就是说,局部变量只在定义它的函数或复合语句范围内有效,只能在定义它的函数或复合语句内才能使用它们。

全局变量

全局变量也称外部变量,它是在函数外部定义的变量。它不属于哪一个函数,而是属于一个源程序文件:其作用域是整个源程序。
几乎程序中的所有函数都能使用全局变量,客观上全局变量就起到了在函数间传递数据的作用,甚至可以减少形参和实参的数量。当然在享用它的好处时,也要慎重,避免全局变量过多带来的降低函数通用性及存储空间的浪费。

局部变量与全局变量的区别

局部变量
作用域:函数体内{}
生命周期:当函数被调用的时候,变量诞生了;当函数运行结束的时候,变量消失了。
全局变量
作用域:整个工程当中
生命周期:当程序运行的时候,存在了;当函数运行结束的时候,消失了。

代码如下(示例):

int jieChen(int n) {
	int i = 1;
	int pro = 1;
	if (i > n) {
		return pro;
	}
	else {
		jieChen(n-1);
		pro = pro *n;
		return  pro;
		;
	}
}
int main() {
	int n = 0;
	scanf("%d", &n);
	printf("%d",jieChen(n));
}

上述是用递归函数求n的阶乘,不过代码有些繁琐,而且我觉得局部变量pro用法也用错,但是我的找不出。所也我只能将pro给去掉。去掉之后的代码是这样的:

int jieChen(int n) {
	int i = 1;
	if (i > n) {
		return 1;
	}
	else {
		return  jieChen(n - 1)*n;
	}
}
int main() {
	int n = 0;
	scanf("%d", &n);
	printf("%d",jieChen(n));
}
int jieChen(int n) {
	int i = 1;
	if (i > n) {
		return 1;
	}
	else {
		return  jieChen(n - 1)*n;
	}
}
int main() {
	int n = 0;
	scanf("%d", &n);
	printf("%d",jieChen(n));
}

sizeof和strlen

sizeof:sizeof是运算符,可以以类型、函数、做参数
strlen:strlen是函数,只能以char*(字符串)做参数。而且,要想得到的结果正确必须包含 ‘\\0’
例如: charn=“abcdefg”;
strlen(n)
strlen(char
)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\\0’停止。这个解释在数组中有更好的解释:
char[]={‘a’,‘b’,‘c’,‘d’,‘e’}和char[10]={‘a’,‘b’,‘c’,‘d’,‘e’}两者用strlen函数实现起来结果是不一样的,区别就是前者[]里没有传入参数也就是说没有默认的\\0,这就跟前面讲的一样,strlen只认\\0,没有它函数就无法正常结束,所以前者用strlen来实现求长度是不现实的,而后者则使用了[10],这种数组的特点就是前面规定了的hello占5个长度,但是后面五个位置全部都由\\0代替.

以上是关于2021-06-06C语言初阶(新手必看)的主要内容,如果未能解决你的问题,请参考以下文章

C语言初阶总结思维导图,小白必看

swift闭包新手详解(新手必看)

新手小白程序员必看!有些人说C语言要比Java更难!你应该怎么办?

C语言实现扫雷(初阶)

编程思维之与人类语言的思维差异(新手必看)

C语言初阶《三子棋》