初识C语言(2),教你读懂C语言,理清C语言脉络,真正入门C语言(函数、数组、操作符、常见关键字、#define定义常量和宏、指针和结构体等相关内容)


因为为初识C语言,目的在于大家能看懂简单的C程序为主,所讲的内容主要为基本内容,更加详细的知识将在后面详细解剖

数组

仅以一维数组为例,二维或多维在此处不涉及

  • 数组的定义
    C语言中给了数组的定义:一组相同类型元素的集合。
    数据类型 数组名[整型常量表达式]
    注意整型常量表达式中只能有整型常量或字符型常量,不能包含实型常量和变量。例
int a[5];
int a[5+9];
上述都是合法的
int n=20;
int a[n];
上述是不合法的
  • 数组的赋值
    将数组元素的初始值依次放在一对花括号内且用逗号进行分隔。大括号内的数据类型必须于所定义数组的数据类型一致。
char[3]={'A','B','C'};
int a[3]={1,2,3,};
  • 数组的引用
    数组在使用使利用下标来进行,数组中元素的下标都是从0开始,即第一个元素的下标为0,若有一个长度为N的数组,最后一个元素的下标为N-1。
int arr[3]={1,2,3};
//定义了一个空间大小为3的数组arr,第一个元素1在arr[0]中
//第三个元素3在arr[2]中

函数

函数的特点就是简化代码,代码复用。对于要用到的一种特定性能,我们可以提前设定好,在使用的时候调用他。如下,计算两数相加

#include<stdio.h>
int Add(int x,int y)
{
   return x+y;
}
int main()
{
  int a,b;
  scanf("%d",&a,&b);
  sum=Add(a,b);
  printf("%d",Add);
 return 0;
}

操作符

  • 算术操作符
    % * / + -
    /两边为整数结果为整数,有一个小数结果为小数 5/2=2 5.0/2=2.5
    %求余两个操作数必须为整数
  • 移位操作符
    1、<<左移操作符

左移几位剩余的部分补几位0

int a=6;
int b=a<<1;//将a的二进制位左移一位的值给b,注意a的值并没有改变

2、>>右移操作符
右移设计整数提升问题,不在此处讲解

  • 位操作符
    & 按二进制为与,对应的二进制位只要有0就是0
int a=3; int b=5
int c=a&b;
a=00000000000000000000000000000011
b=00000000000000000000000000000101
c=00000000000000000000000000000001

^ 按二进制位异或 相同为0,相异为1

int a=3; int b=5
int c=a^b;
a=00000000000000000000000000000011
b=00000000000000000000000000000101
c000000000000000000000000000000110

| 按二进制位或 二进制位只有有一个1就为1

int a=3; int b=5
int c=a^b;
a=00000000000000000000000000000011
b=00000000000000000000000000000101
c=00000000000000000000000000000111
  • 赋值操作符
    = -= += *= /= %= <<= >>=
  • 关系操作符
==
>=
<=
!=
<
>
  • 单目操作符
! 逻辑反操作
-  负值
+  正值
&  取地址
sizeof 计算操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
--  前置、后置
++  前置、后置
*  间接访问操作符(解引用操作符)
(类型) 强制类型转换

常见关键字

关键字是C语言内置好的,可以使用这些关键字,但自己定义的符号不能和这些关键字冲突。一些常见的关键字如下:

  • auto自动变量关键字。 局部变量就是自动变量,自动创建自动销毁
#include<stdio.h>
int main()
{
    auto int i;
         int i;两种写法意思一样,现在使用的过程中自动将auto省略
    return 0;
}
  • break-停止,中断,用于循环、switch case语句
  • continue用于跳出本次循环,不能用于switch语句
  • const常属性
  • default是switch语句里的收尾,默认选项
  • do while、while、for循环关键字
  • if、if else、switch选择关键字
  • enum枚举关键字、struct结构体关键字
  • union联合体(共用体)关键字
  • volatile主要在于Linux系统中讲解
  • typedef类型定义,可以理解为类型重命名。 给unsigned int重新起了个名字uint,可拿unit定义变量`
#include<stdio.h>
typedef unsigned int unit
int main()
{
    unsigned int num=100;
    uint num1=100;
    return 0;
}
  • register寄存器关键字
#include<stdio.h>
int mian()
{
  register int num=9;
  &num;//这中写法错误
  return 0;
}

register int num=100;建议把100存放到寄存器中,编译器最终决定。寄存器是独立于内存的空间,所以寄存器变量不能取地址

  • static在C语言中的用法:1、修饰局部变量 2、修饰全部变量 3、修饰函数
    1、修饰局部变量
    被static修饰的变量进入函数创建,出函数不销毁,生命周期和程序的生命周期差不多,但不会改变作用域。
#include<stdio.h>
void vest1()
{
  int a=0;
  a++;
  printf("%d",a);
  }
vest2()
{
  static int a=0;
  a++;
  return 0;
}
int main()
{
 int i=0;
 for(i;i<10;i++)
 {
 vest1();//1 1 1 1 1 1 1 1 1 1
 vest2()//1 2 3 4 5 6 7 8 9 10
 }
  return 0;
}

2、修饰全局变量
默认一个全局变量是具有【外部】链接属性的,如果全局变量被static修饰,是全局变量的外部链接属性变成了内部链接属性,这个时候这个全局变量只能在本源文件内部使用。
其他源文件无法链接到,也无法使用!
在这里插入图片描述
3、修饰函数
用法和修饰全局变量类似,函数具有外部连接属性,如果被static修饰,外部链接属性变成了内部链接属性。函数只能在自己的源文件内部使用,不能在其他源文件内部使用!!!
在这里插入图片描述

#define定义常量和宏

  • 定义常量 #define MUM 100
  • 定义宏 #define MAX(X,Y) (X>Y?X:Y) 使用过程中参数替换进宏体
#include<stdio.h>
#define NUM 100
#defien MAX(X,Y) (X>Y?X:Y)
int main()

指针

  • 内存
    内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。

    所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。

    为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

  • 内存的编号(地址)怎么产生 在32位机器下,有32根地址线(物理的电线),通电时有正负电,转换成数字信号后正为1,负为0,形成32位二进制序列,共有2的32次方个序列

  • 一个内存单元是一个字节byte

  • 地址怎么拿取的
    在这里插入图片描述
    拿到的是a的第一个地址,顺腾摸瓜向下拿到所有地址

  • 指针变量的大小
    指针大小在32位平台是4个字节,64位平台是8个字节。

  • *解引用操作符

int a=10;
int *p=&a;
*p=122; *表示通过p里面存放的a的地址,找到a,对a的数据进行操作

结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。比如描述学生,学生包含: 名字+年龄+性别+学号这几项信息。这里只能使用结构体来描述了。如下

#include<stdio.h>
//声明结构体类型
struct Student
{
//成员变量
    char name[];
    int age;
    char sex[5];
    char id[12];
};
int main()
{
//创建的结构体变量及其初始化
    struct Student s1={"zhangsan",20,nan,2020};
    struct Student s2;
    struct Studengt*p=&s1;
    //打印 .操作符 结构体变量.成员名
    printf("name:%s age:%d\n",s1.name,s1.age);
    //-> 结构体指针->成员名
    printf("%s,%d",p->name,p->age);
    return 0;
    
    
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jiawen_captial

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值