赞
踩
今天是初识C语言第四篇内容主要包括关键字讲解(部分)和define定义常量和宏以及指针的初步认识
了解,没错你没听错,可能你对C语言指针多多少少会听说过一些,评价一般都是难,特别难,非常难等等,其实今天我们只是做一个初步了解,关于更加详细的内容在之后再论述,另外也再次想说一下,没有学不会的东西,只要肯下功夫,特别是对于编程这件事,要耐得住寂寞,坚持下去,好了闲话就先聊到这里,接下来开始我们新手上路C语言初识C语言第四篇。
我们C语言中是提供了丰富的关键字,例如已下这些
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
在了解这些关键字之前,这里还需要强调一下C语言中的关键字是不能自己创造的,关键字是C语言本身就设定好的,那我们先来认识几个关键字
取自两个英文单词type,define。顾名思义就是类型定义,但是在C语言中我们为了便于理解会叫作类型重命名,具体用法如下
typedef int uint;
int main()
{
int a = 0;
uint b = 0;
return 0;
}
这里的a和b的类型都是整形,只不过是将类型重新让用户自己设定了一个名称,看到这里,typedef的基本用法就弄清楚了。
在C语言中static有三种功能,
1.修饰局部变量——称为静态局部变量
2.修饰全局变量——称为静态全局变量
3.修饰函数——称为静态函数
在学习static的用法之前我们需要先了解一点知识关于计算机内存的存储,计算机内存的存储大致可以分为几个区域栈区,堆区,静态区,代码区,常量区,这里我们只重点栈区和静态区,感兴趣的话可以自行去查阅相关内容,栈区通常放置的是局部变量,函数参数,临时变量等,这些量进入作用域就会生成,出了作用域就会释放;静态区通常存储我们的静态变量,全局变量等,而在静态区创建了变量后,直到程序结束才会释放,了解了这些,我们就可以看下面的示例了
1.修饰局部变量,
void test()
{
static int i = 1;
printf("%d\n",i);
i++;
}
int main()
{
int j= 0;
for (j = 1; j < 10; j++)
{
test();
}
return 0;
}
分析此代码的结果应该是输出1到10,而如果我们在test函数中没有用static修饰局部变量i,我们输出的结果将会是十个1,因为没有static修饰的话,每次进去test函数,i都会被重新创建,出去test函数的话就会将i释放出去,如果能理解到这里static的作用这里就彻底明白static修饰局部变量时的作用了。
修饰全局变量,
在学习static修饰全局变量之前,我们还是需要一点知识储备,**对于一个全局变量来说,它本身是具有外部链接属性的,**所谓外部链接属性通俗点来说就是这个变量除了它本身所在的文件内部可以使用外,在其它文件里也能够使用,使用的方式是先用extern声明一下,这样就可以在另外的文件中使用了,如果用static是将一个全局变量修饰,这个全局变量将会只有内部链接属性,也就是只能在其自身所在的文件内部使用,如果觉得难以理解也没关系,下面我们举例来说明
大家可以看到我的变量num1是定义在add.c文件里面,而在另一个文件里面只要用extern声明一下,即可使用,而如果我在变量num1之前用static来修饰的话,在另一个文件中将不能够使用,编译器将会报错,讲到这里,我们来总结一下,static修饰局部变量时是将局部变量的生命周期延长了,而其作用域没有改变;static修饰全局变量时将全局变量的外部链接属性变成了内部链接属性,使得全局变量的作用域变小了,还记得我们开头讲的知识储备吗,关于内存的分配,究其原因,背后的原理其实是用static修饰后变量的存储位置发生了变化,放到了静态区中,好了关于static修饰局部变量和全局变量就先解释到这里,接下来我们看static修饰函数。
3.修饰函数
如果你能够理解static修饰全局变量的话,那么static修饰函数也就很好理解了,我们来结合具体示例来说明
MAX(int x, int y) { if (x < y) return y; else return x; } int main() { int a = 0; int b = 0; int max = 0; scanf("%d%d",&a,&b); max=MAX(a, b); printf("%d\n",max); return 0; }
分析此代码,此处是没有使用static的情况,分析一下这个代码是想要使用MAX函数来判断两个数的大小并且输出较大的值,如果将函数放在另一个源文件中,如下
若将MAX函数放到另外一个文件中依旧可以用extern声明使用,而如果用static修饰的话,函数MAX将只能在它本身源文件的内部使用,也就是函数的外部链接属性变成了内部链接属性。
好了,关于static的用法,就三种第一种修饰局部变量,第二种修饰全局变量,第三种修饰函数,以上就是关于static用法的学习。
#define定义常量的基本作用就是定义标识符常量,格式就是#define 变量名 变量的值
如下
#include<stdio.h>
#define MAX 1000
int main()
{
printf("%d\n",MAX);
return 0;
}
此代码打印出的结果会是1000,也就是说MAX的值是一千,标识符常量简单来理解就是标识符MAX就是1000的一个符号,并且是常量,它的值是不可改变的。
#define定义宏
也许你听到这个词语就总是想问宏是什么呀,没听过,不要着急,我们来举例来理解
int MAX(int x, int y) { if (x > y) return x; else return y; return 0; } int main() { int a = 0; int b = 0; scanf("%d%d", &a, &b); int max = MAX(a, b); printf("%d\n", max); return 0; }
通常我们是通过函数来求两个数的最大值,如上,那么我们怎么用宏来实现呢?
#define MAX(x,y) (x>y?x:y)
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
int max = MAX(a, b);
printf("%d\n", max);
return 0;
}
这样是没有任何问题的,依旧可以很好的求出我们想要的结果,为了更好的理解宏我们再来看一个例子
#include<stdio.h>
#define Add(x,y) ((x)+(y))
int main()
{
int a = 0;
int b = 0;
scanf("%d%d",&a,&b);
int sum = Add(a,b);
printf("sum=%d\n",sum);
return 0;
}
关于宏我们就举这两个例子,今天只是带大家初步感受一下什么是#define定义的常量和#define定义宏。
由于本篇篇幅已经不短了,要讲完指针的话有点难,我们就先讲这么多,关于指针我们就放到下一篇和结构体一起来讲。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。