25天学会C语言-第二天-初识C语言下

C语言

数组

数组定义

数组的下标

数组的使用

操作符

常见关键字

个别关键字介绍

defifine 定义常量和宏

指针

内存

指针变量的大小

结构体


数组

存储一个数据可以定义一个变量,但是如果要存储多个数据的话,变量太多就比较麻烦,这时使用数组就再合适不过了!


数组定义

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

数组的下标

每个元素都有一个下标,下标是从0开始的。

数组可以通过下标来访问的。

int arr [ 5 ] = { 0 };
// 如果数组5 个元素,下标的范围是 0-4
第一行为值,第二行表示不同值对应的下标
         

数组的使用

int main()
{
 int arr[5] = {1,2,3,4,5};//开辟空间为5的数组并赋值
 for(int i=0; i<5; i++)
 {
       printf("%d ", arr[i]);//通过下标访问数组中的每个元素,并打印
 }
 printf("\n");
    return 0; }

操作符

先对操作符做简单了解

算术操作符
例如:+ - * / %
移位操作符
>>      <<
位操作符
&    ^     |
赋值操作符
=   +=   -=  *=  /=   &=  ^ =    |=     >>=   <<=
单目操作符
!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof       操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--           前置、后置 --
++           前置、后置 ++
*           间接访问操作符 ( 解引用操作符 )
( 类型 )       强制类型转换
关系操作符
>
>=
<
<=
!=        用于测试 不相等
==       用于测试 相等
逻辑操作符
&&     逻辑与
||         逻辑或
条件操作符
exp1 ? exp2 : exp3 (这是一个三目运算符,如果exp1为true,执行exp2.否则执行exp3)
下标引用,函数调用,结构体成员
[]    ()    .      ->

常见关键字

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

个别关键字介绍

关键字 typedef
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. 修饰函数-静态函数

具体解释:

修饰局部变量
代码示例:
如果我们要打印1到10,那么此时代码1则达不到效果,代码2中的变量i加了static可以做到
#include <stdio.h>
void test()
{
    int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
   {
        test();
   }
    return 0; }
//代码2
#include <stdio.h>
void test()
{
    //static修饰局部变量
    static int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
   {
        test();
   }
    return 0;
}
对比结果可得
结论:static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束, 生命周期才结束。

修饰全局变量
代码示例:
//代码1
//add.c
int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0; }
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0;
}

运行时代码1正常,代码2出现Link错误

结论:一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,
不能在其他源文件内使用

修饰函数
代码示例:
//代码1
//add.c
int Add(int x, int y) {
    return c+y; }
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0; }
//代码2
//add.c
static int Add(int x, int y)
{
    return c+y; }
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0; }
代码1正常,代码2在编译的时候会出现Link错误.
结论:
一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

defifine 定义常量和宏

代码示例:

//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 个字节
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该 内存单元的地

变量都有地址,取出变量地址如下:


int main()
{
 int num = 10;
 &num;//使用&取出num的地址
    //注:这里的int类型的num有4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
 printf("%p\n", &num);//打印地址,%p是以地址的形式打印
 return 0;
}

取出地址放到哪里(如何存储),这时就需要定义指针变量。

int num = 10;
int* p;//p为一个整形指针变量
p = &num;//用p存储num的地址
指针的使用实例:

int main()
{
 int num = 10;
 int *p = &num;
 *p = 20;
    return 0; }

除了整形类型指针,还有其他的类型指针

int main()
{
 char ch = 'w';
 char* pc = &ch;
 *pc = 'q';
 printf("%c\n", ch);
    return 0; }

指针变量的大小

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位平台是4个字节,64位平台是8个字节。

结构体

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

//结构体的初始化:
//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
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);

 总结:以上基本就把C语言的主要知识进行了一个大概的介绍。

            接下来的内容将会详细去介绍C语言中的各块内容,如果各位大佬发现有不正确的地方,欢迎指正与批评!

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

.小柱.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值