自学C语言入门教程(下)

函数

在c语言中,程序员可以把一些独立的功能,封装成一个函数

拿一个简单的加法程序做例子

代码1:

#include <stdio.h>
int main()
{
    int num1 = 0;
   int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0; }

如果将加法运算的过程封装成函数,就写成以下代码

代码2:

#include <stdio.h>
int Add(int x, int y) {
   int z = x+y;
   return z; }
int main()
{
    int num1 = 0;
   int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = Add(num1, num2);
    printf("sum = %d\n", sum);
    return 0; }

好处就在需要的时候可以随时调用这个函数,不用重新再写一遍运算过程

数组

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

数组定义

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//定义一个整形数组,最多放10个元素

数组的下标

C 语言规定:数组的每个元素都有一个下标,下标是从 0 开始的。
数组可以通过下标来访问的。
比如上面提到的数组
arr[10]12345678910
下标0123456789

数组的使用

如果我们想要把一个一维数组的内容打印出来,可以使用for循环语句

#include <stdio.h>
int main()
{
 int arr[10] = {1,2,3,4,5,6,7,8,9,10};
 int i = 0;
 for(i=0; i<10; i++)
 {
       printf("%d ", arr[i]);
 }
 printf("\n");
    return 0;
 }

操作符

C语言中有丰富的操作符,给我们提供了以下类型的操作符

算术操作符

预算符描述
+把两个操作数相加
-从第一个操作数中减去第二个操作数
*把两个操作数相乘
/分子除以分母
%取模运算符,整除后的余数
++自增运算符,整数值增加 1
--自减运算符,整数值减少 1

关系运算符

运算符描述
==判断两个操作数的值是否相等,如果相等则条件为真。
!=判断两个操作数的值是否相等,如果不相等则条件为真。
>判断左操作数的值是否大于右操作数的值,如果是则条件为真。
<判断左操作数的值是否小于右操作数的值,如果是则条件为真。
>=判断左操作数的值是否大于或等于右操作数的值,如果是则条件为真。
<=判断左操作数的值是否小于或等于右操作数的值,如果是则条件为真。

逻辑运算符

运算符描述
&&逻辑与运算符。如果两个操作数都非零,则条件为真。
||逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。
逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。

位运算符

运算符描述
&按位与操作,按二进制位进行"与"运算。
|按位或运算符,按二进制位进行"或"运算。
^异或运算符,按二进制位进行"异或"运算。
~取反运算符,按二进制位进行"取反"运算。
<<二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
>>二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

赋值运算符

运算符描述
=简单的赋值运算符,把右边操作数的值赋给左边操作数
+=加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数
-=减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数
*=乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数
/=除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数
%=求模且赋值运算符,求两个操作数的模赋值给左边操作数
<<=左移且赋值运算符
>>=右移且赋值运算符
&=按位与且赋值运算符
^=按位异或且赋值运算符
|=按位或且赋值运算符

其他运算符

运算符描述
sizeof()返回变量的大小。
&返回变量的地址。
*指向一个变量。
? :条件表达式,如果条件为真 ? 则值为 X : 否则值为 Y

关键字 typedef

 可以使用typedef 关键字,用它来为类型取一个新的名字。

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
    //观察num1和num2,这两个变量的类型是一样的
    unsigned int num1 = 0;
    uint_32 num2 = 0;
    return 0; }

关键字static

C 语言中:
static 是用来修饰变量和函数的
1. 修饰局部变量 - 称为静态局部变量
2. 修饰全局变量 - 称为静态全局变量
3. 修饰函数 - 称为静态函数

#define 定义常量和宏

//define定义标识符常量
#define MAX 1000

//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
    int sum = ADD(2, 3);
    printf("sum = %d\n", sum);
    
    sum = 10*ADD(2, 3);
    printf("sum = %d\n", sum);
    
    return 0; }

指针

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是 1 个字节
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该 内存单元的地
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
取出变量地址如下:
#include <stdio.h>
int main()
{
 int num = 10;
 &num;//取出num的地址
    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
 printf("%p\n", &num);//打印地址,%p是以地址的形式打印
 return 0; }

指针的使用例子

#include <stdio.h>
int main()
{
 int num = 10;
 int *p = &num;
 *p = 20;
    return 0; }

指针变量的大小

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof(char *));
    printf("%d\n", sizeof(short *));
    printf("%d\n", sizeof(int *));
    printf("%d\n", sizeof(double *));
    return 0; }

指针变量的大小取决于地址的大小
32位平台下地址是32个bit位(即4个字节)
64位平台下地址是64个bit位(即8个字节)

结构体

结构体是 C 语言中特别重要的知识点,结构体使得 C 语言有能力描述复杂类型。
比如描述学生,职员包含: 名字 + 年龄 + 性别 + 工号 这几项信息。
这里只能使用结构体来描述了。
struct Stu
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]; //工号
};

struct --- 定义结构体的关键字

结构体初始化

//打印结构体信息
struct Stu s = {"李四", 22, "男", "20220101"};


//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);


//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps- >id);

结构体成员访问的操作符

操作符用法
.结构体变量.结构体成员
->结构体指针->结构体成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值