初识C语言

1.C语言概述

在日常生活中,人之间的交流都是通过语言,例如汉语,英语来交流的。当我们需要与计算机进行通信的时候,这就需要用到计算机语言。C语言是一门通用的计算机语言,广泛应用于底层开发;

计算机语言的发展:低级->高级

                   如:二进制指令(10100010)->汇编指令(助记符)->B语言->C语言(高级语言)

C语言是高级语言,编辑完的源程序(.c),不能直接在机器上运行,需要进行编译生成目标程序(.obj),目标程序连接系统库函数文件生成可执行程序(.exe);

常用的编译器有:Clang,GCC,WIN-TC,MSVC,Turbo-C等;

2.第一个C语言程序

通过这个程序可以初步了解C语言的简单语法特点和结构。

#include<stdio.h>                           //将stdio.h库文件包含在该文件中
int main()
{ 
    printf("welcome to c world!!");       //printf是库函数,专门用来打印数据的
    return 0;
}

printf 是C语言标准库函数,定义于头文件 <stdio.h>,使用前要对头文件进行引用,std是标准,i是输入,o是输出,此头文件内部包括输入/输出函数的信息;

#include<stdio.h>预处理指令,告诉编译器在这里要包含一个叫stdio.h的文件;

main是主函数,是程序的入口,有且仅有一个;

3.数据类型

计算机处理的对象是数据,而数据是以某种形式存在的。为了能准确使用数据描述生活中的各种信息,如3,3.14,字符等,c语言将数据划分了不同的数据类型。

可以用sizeof();库函数查看数据类型的大小;

在不同计算机上,int的大小不一样,32位机器int是2byte,64位机器int是4byte;

%zu是打印sizeof返回值;

4.变量和常量

常量是指在程序运行过程中值不能改变的量,变量是程序运行过程中其存储的值可以改变的量;

4.1变量

变量的定义:数据类型    变量名1(,变量名2...);

变量的创建本质是向内存申请空间。

变量的作用域:变量的可用性范围;

变量的生命周期:指变量在程序运行过程中的存在时间;

变量可分为局部变量和全局变量。局部变量的作用域在其局部范围,其生命周期从进入作用域开始,出作用域结束。全局变量的作用域是整个工程,生命周期是整个程序的生命周期。

同一个工程下,另一个源程序想使用这个变量需要用extern声明;

4.2.常量

1.字面常量

如:30,3.14,'a',"abc"

2.const修饰的常变量

const修饰的变量,本质上还是变量,但不能修改,具有了常量的属性。

3.#define定义的标识符常量

4.枚举常量

#define pi 3.1415f   //标识符常量
enum color             
{
    red,          //枚举常量
    green,
    blue

};

5.字符,字符串,转义字符

字符包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。

字符型数据在内存存储的是其ASCII编码值,所以字符型数据和整型数据在c语言可以通用,只不过字符型存储字节为1byte.

字符常量是用一对单引号括起来的一个字符,书写形式如:'a','b'

字符串常量用一对双引号括起来的零个或多个字符序列,书写形式如:"abcdef","shfk"

没有相应的字符串变量,可以用字符数组来存放字符串。

注意:字符占1byte的内存空间,而字符串占的内存空间是字符串中字节数加上字符串结束标志'\0'(ascii值为0)

sizeof计算一种数据类型所占存储空间长度(byte);

strlen计算字符串的长度,单位:byte,遇到'\0'这个标志停止计算,不计算\0;

若定义一个不带'\0'的字符数组,strlen计算时,编译器找不到'\0',就会继续往下寻找'\0',直到找到,所以下面就输出15了。printf也是,找不到\0,就一直向下打印直到找到字符串结束标志\0停止。

 转义字符,显而易见,就是转变了原有字符的含义,具有特定的含义,实现了一些控制功能,是一种特殊的字符常量。

6.注释

帮助程序的理解

1./* 注释内容 */

2.  //注释内容

7.选择和循环语句

当遇到需要选择判断的时候 ,我们就需要用到选择语句if和switch.

在使用if时只能进行两路的选择,在实现多路选择时需要使用多个if嵌套,所以用if解决多路问题有些不便,这时候可以用switch实现多分支程序设计。

if  (条件)   语句1;

else       语句2;

当条件成立的条件下,执行语句1,不成立则执行语句2,else也可以省去,如:  if  (条件)   语句;

当条件成立则执行语句。

switch,先对括号中的表达式进行计算,然后按顺序找出某个常量值与计算值相匹配的case,以此为入口,执行case语句后各个语句组,直到遇到break或switch的右花括号终止语句。若没有匹配的就执行default后的语句。

当我们需要重复做一件事的时候可以考虑循环while,do..while和for.

while当型循环,当条件成立执行循环体。

do...whiile,直到型循环,先执行循环体,后判断是否继续执行循环体。

for格式化的循环语句,用起来更加的方便。

for 基本形式

for(循环变量赋初值;循环继续条件;循环变量增值)

      语句;

8.数组

数组就是相同类型元素的集合。

数组的定义,

类型符   数组名[常量表达式];

在定义时,[]为数组的元素个数,这个常量表达式必须时正整型。

数组的使用,c语言规定数组只能逐个引用,不能一次引用整个数组。

数组通过下标引用,

引用格式:数组名[下标表达式]

数组的下标时从0开始的,如

当我们要引用第三个元素的时候,是数组名[2];这样引用。

int main()
{  
    int i = 0;
    //创建5个元素的数组并赋值
    int arr[5] = {1,2,3,4,5};
    arr[2] = 10;   //访问数组第三个元素,赋值
    while (i < 5)
    {
        printf("%d ", arr[i]);
        i++;
    }             
    return 0; 
}

9.函数

函数实现了程序的模块化,支持了可移植性,提高了程序的效率。

函数有两种,一种是系统提供标准库函数,使用前需要包含对应的头文件,另一种是用户自定义的,需要先定义后再使用。

一个c工程必须包含一个main函数,可以有多个.c文件。

10.操作符

操作符是对数据进行操作,操作符连接数据形成的式子叫表达式。

11.常见关键字

关键字是特殊的标识符,是C语言规定的,有特定的含义。

以下介绍两个关键字

关键字typedef:类型定义,可以理解为类型重命名,如图,可见创建的变量都是unsigned int类型

 关键字static:用来修饰变量和函数的

1.修饰局部变量,被称为静态局部变量;

2.修饰全局变量,被称为静态全局变量;

3.修饰函数,称为静态函数;

内存可分为栈区,堆区,静态区等,栈区的数据出了作用域就销毁,静态区的数据出了作用域不会销毁,直至程序的结束,所以局部变量是存在栈区的,全局变量是存在静态区的。

1.

​
#include<stdio.h>

void test()
{
    static int a = 1;
    a++;
    printf("%d",a);
}
int main()
{
    int i=0;
    while (i<10)
    {
        test();
        i++;
    }
    return 0; 
}

​//运行结果是234567891011

static修饰局部变量的时候,局部变量出了作用域不销毁,本质上,static修饰局部变量的时候,改变了变量的存储位置(从栈区到静态区),改变了变量的生命周期。

static修饰的变量只初始化一次,再次调用不会被初始化。

2.全局变量和函数是有外部链接属性的,static修饰全局变量和函数的时候,其外部链接属性就变成了内部链接属性,同个工程下的其他源文件(.c)就无法使用了,会出现解析错误,链接错误。

修饰全局变量

修饰函数

12.指针

要了解指针,先来了解一下内存。

内存用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它是外存CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行。

为了有效的使用内存,就把内存划分为一个个内存单元,每个内存单元的大小是一个字节。为了有效访问到内存的每个单元,就对内存单元进行了编号,这个编号就是该内存单元的地址,这个地址也被称为指针。

存放指针的就是指针变量;

int main()
{
    int a = 10;   //向内存申请4个字节,存放10
    printf("%p\n",&a);    //&是取地址操作符,%p是打印数据的地址
    //定义指针变量存放a的地址
    int* p = &a;  
  //int是说明p指向的对象是int类型,*说明p是指针变量
    *p = 20; //解引用操作符,通过p存放的地址找到p指向的对象,在这里*p就是指向的对象a
    printf("%d\n", a);
    return 0; 
}

13.结构体

结构体是一种自定义类型,可以把一些类型组合在一起的做法。

结构体成员的两种引用方式

1.结构体对象.成员名

struct stu
{
    char name[20];
    int age;
};
int main()
{  
    //创建结构体对象
    struct stu s = {"张三","20"};
    s.age = 26;
    printf("%s\n", s.name); //通过结构体对象.成员名引用成员
    printf("%d", s.age);
    return 0; 
}

2.结构体指针变量->成员名


struct stu
{
    char name[20];
    int age;
};
print(struct stu*ps)            //指针变量ps接受传过来的地址
{
    printf("%d", (*ps).age);     //通过解引用访问对象,再通过结构体对象.成员名引用成员
    printf("%d", ps->age);     //通过结构体指针变量->成员名引用成员
    
}
int main()
{  
    //创建结构体对象
    struct stu s = {"张三","20"};
    print(&s);                   
    return 0; 
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值