初步学习C语言

文章目录

    • 全局变量与局部变量
    • 常量
    • 字符与字符串
    • 转义字符
    • 操作符
    • 关键字
    • 小结

全局变量与局部变量

全局与局部变量的区别在于其作用域(即变量能够被使用的范围)或者也叫生命周期。

 局部变量的作用域(或生命周期)在定义该变量的{}内,离开该{}会自动销毁,但是如果使用static这个关键字,情况就有所不同。(这个我会在关键字这个模块详细讲解)

全局变量,定义于{}之外,故名思义,作用于整个程序,它的生命周期是程序的生命周期,作用域也是整个程序作用域(注意:当我们在使用全局变量与局部变量时,如果两个变量名字相同,局部变量优先)

例如

int a=10;

#include<stdio.h>        

int main()

{

        int a=2;

        printf("%d",a);

        return 0;

}                        //此程序数输出的结果是2而非10.采用的就是局部优先的原则

全局变量也有(extern关键字的类型)即声明外部的文件中的符号,这个会在后面的关键字中于static有奇妙的反应。

常量

常量包括字面常量const修饰的常变量,#define定义的标识符常量以及枚举常量这四类。

字面常量与枚举常量这里不多介绍。

const修饰的常变量: 例如 :const int a=10;  将本为变量的a定义为具有常量属性的常变量,其本质仍为变量,可是结果不允许改变。

#define  变量名  赋值

例如:        #define max 100        或者        #define str "hello"        以上分别定义了一个整型和字符串类型的标识符常量,可以在{}内进行直接使用。

例如;

#define str "hello"
int main()

{

        printf("%s",str);

        return 0;

}        //输出结果就是hello.

字符与字符串

//c语言没有关于字符串类型的

字符:

例如:char a='e';

//char是描述字符类型

//其中a是字符变量,e是字符常量

字符串:

例如:char a[]="abcde";

//字符串是利用字符数组进行存储。

//字符串在其有效长度后会自动添加'\0'作为结束符,所以字符串的长度会格外+1;

注意区分以下两个的区别

char str1[ ]="abc";                //长度为4

char str2[ ]={'a','b','c'};        //长度不一定为3,这些在运用strlen函数时会体现。

同时

printf("%s\n",str1);        //输出为abc

printf("%s\n",str2);        //输出不一定为abc,同上。理由是我们c语言读入或者输出遇见'\0'会停止,但我定义的这个str2后面不会自动生成'\0',所以它会继续进行直到遇见'\0'为止。

转义字符

这里只介绍\ddd和\xdd。

1.\ddd

ddd表示1-3个八进制数,如:\134

思考以下结果:

printf("%c\n",'\134');        //将八进制的134转化为十进制数,再ASCII码表找十进制数对应的字符即是结果。

2.\xdd

 dd表示十六进制数,如:\54

printf("%c\n",'\54');         //计算方法同上

操作符和关键字

操作符(只讲一些)

1.sizeof

sizeof是计算变量所占空间大小,计算单位是字节,例如int 类型占4个字节,double占8个字节。

当然,sizeof有计算数组元素的作用

例如:

int a[ ]={1,2,3,4,6,7,8};

int number=sizeof(a)/sizeof(a[1]);

2.条件操作符(三目操作符)

     exp1  ?  exp2  :  exp3;

例;

int a=20,b=10;

int r={a>b ? a : b};         // r的结果为20。

原理:

如果exp1为真,执行exp2,并且输出exp2的结果。

如果exp1为假,执行exp3,并且输出exp3的结果。

3.逗号表达式

exp1,exp2,exp3,exp4....

//        依从从左往右计算,输出结果为最后一个表达式的值。

关键字(只讲一部分)

1.typedf         变量重命名        //只针对类型

例如:

unsigned   int  squ=0;

我可以用        typedf    unsigned   int   uint   //用uint表示unsigned   int 

这样做方便 定义函数。

2.static        修饰变量和函数

一.修饰局部变量(重点)

例:

#include<stdio.h>

void run()

{
        static int  a=1;               
//易错点:static产生的a不会随着run函数执行完后自动销毁,它会                                                   执行到整个程序结束为止。

        a++;

        printf("%d",a);

}

int main()

{

        int i=0;

        while(i<4){

                i++;

                run();

}

return 0;                //结果为2,3,4,5

}

上面我们可以理解为 static这个关键字修饰局部变量的时候,局部变量的存储位置发生了改变,原本应该存放在栈区的局部变量,被转变到的静态区,作用域发生了改变,不会在出原本的作用域时被自动销毁。所以 a 的值也不会重新变为1.

二.修饰全局变量(对于定义在{ }之外的变量)

包括:1.extern        //声明的外部符号

           2.在外部符号前加上  static.

例如:

#include<stdio.h>

//        int a=10;        a为全局变量

static        int a=10;//        相比之下,a的属性发生变化

int main()

{
        printf("%d",a);

        return 0;

}

当然,在另外一个文件如果定义了 a,我们引用会采用 extern 来引进变量。

extern int a;

但是如果前面加上static(是指原本定义的全局变量被static了,如上)

程序会报错。

原因是static 改变了全局变量的外部链接属性,将其转变为内部链接属性,无法在其他源文件.c中使用,其实函数的extern 也同上述一样.

使用    static  是保证变量的安全性。

小结

以上就是我两天的学习c语言的相关成果,如果有任何不对的地方,请大家留言指正,万分感谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值