【鹏哥C语言网课笔记】:初始C语言

目录

P1-初始C语言(1)

一.数据类型

二.变量的分类

①局部变量:

②全局变量:

三.变量的作用域和生命周期

P2-初始C语言(2)

一.常量

①字面常量

②const 修饰的常变量

③#define 定义的标识符常量

④枚举常量

二.字符串+转义字符+注释

①字符串

②转义字符

③注释

三.选择语句

四.函数

五.数组

六.操作符

P4-初始C语言(3)

一.常见关键字

关键字:register

关键字:signed,unsigned

关键字:typedef

关键字:static

二. #define定义常量和宏

三.指针

内存

P5-初始C语言(4)

结构体


P1-初始C语言(1)

一.数据类型

char //字符数据类型 ---%c

short //短整型

int //整型 ---%d

long //长整型 ---%ld

long long //更长的整型

float //单精度浮点数 ---%f

double //双精度浮点数 ---%lf

sizeof()获取数据在内存中所占用的存储空间,以字节为单位来计数,一个字节=8个比特位。

二.变量的分类

局部变量

定义在代码块({ })内部的变量,只能在定义的局部当中使用,并不是所有局部变量都放在main函数当中,放在main函数当中的变量是局部变量。

全局变量

定义在代码块({ })之外的变量,在哪里都能使用

当局部变量和全局变量的名字相同的时候,局部变量优先

C语言语法规定,变量要定义在当前代码块的最前面,否则可能会报错。

三.变量的作用域和生命周期

限定这个名字的可用性的代码范围就是这个名字的作用域
局部变量的作用域:变量所在的局部范围。
全局变量的作用域:整个工程。
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
全局变量的生命周期是:整个程序的生命周期。

P2-初始C语言(2)

 scanf是C语言提供的,scanf_s不是标准C语言提供的,是VS编译期提供的,不具有跨平台性。不建议因为使用VS编译期,把scanf替换成VS推荐的scanf_s

#define _CRT_SECURE_NO_WARNINGS 1        让警告失效

一.常量

C 语言中的常量分为以下以下几种:

①字面常量

②const 修饰的常变量

③#define 定义的标识符常量

④枚举常量

#include <stdio.h>
int main()
{
    //①字面常量演示
    3.14;//字面常量
    1000;//字面常量
    
    //②const-常属性
    //const 修饰的常变量,使变量不能进行变值
    const float pai = 3.14f;   //这里的pai是const修饰的常变量
    pai = 5.14;//是不能直接修改的!

    // const int n = 10;
    // int arr[n] = {0}; 出错!不可以这样使用
    // const 修饰的常变量在C语言中只是在语法层面限制了变量,n不能直接被改变,但是n本质上还是一个变量的,所以叫常变量
    
    //③#define的标识符常量演示
    #define MAX 100
    int arr[MAX] = {0};
    printf("max = %d\n", MAX);
    
    
    //④枚举常量演示  一一列举
    //枚举关键字-enum
    //举例:性别:男,女,保密
    
enum Sex  //Sex是枚举类型
{
 MALE,
 FEMALE,  //括号中的MALE,FEMALE,SECRET是枚举常量
 SECRET
};

    //enum Sex s = FEMALE;
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    printf("%d\n", SECRET);
 //注:枚举常量的默认是从0开始,依次向下递增1的。默认MALE是0,FEMALE是1,SECRET是2
 //枚举常量不能更改,但是通过枚举类型创建出来的变量可以更改
    return 0; 
}

二.字符串+转义字符+注释

①字符串

"hello bit.\n"
这种由双引号 引起来的一串字符称为字符串字面值 ,或者简称字符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
    char arr1[] = "bit";
    char arr2[] = {'b', 'i', 't'};
    char arr3[] = {'b', 'i', 't',0};
    char arr4[] = {'b', 'i', 't','\0'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    printf("%s\n", arr3);
    printf("%s\n", arr4);
    return 0; 
}
//“abc”里包括'a' 'b' 'c' '\0'
//'\0'是字符串的结束标志,\0的ASCII值是0
#include<stdio.h>
#include<string.h>

int main(){
	char arr1[] = "abc";
	char arr2[] = {'a', 'b', 'c'};
	printf("%d\n",strlen(arr1));
	printf("%d\n",strlen(arr2));

	return 0;
} 

网课里鹏哥使用的VS,输出结果为3 15

 我使用的dev c++,输出的是正确结果3 3,不知道是不是因为dev会自动忽略这个问题

②转义字符

转义字符释义
\?在书写连续多个问号时使用,防止他们被解析成三字母词

\'

用于表示字符常量'
\"用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1-3个八进制的数字。如:\130 X
\xdddd表示2个十六进制数字。如:\x30 0

例1:

C语言编译器会把这 ‘‘’ 一段单引号解析成前两个为一组,最后单出个单引号没地方放,就会报错,如果想要输出 ’ 这一个单引号,在这个单引号前加 \ ,即可。

例2:\ddd用法,(\xdd用法同理,将16进制转换成10进制,作为ASCII码值对应的字符)

③注释

C 语言风格的注释 /*xxxxxx*/           缺陷:不能嵌套注释
C++ 风格的注释 //xxxxxxxx             可以注释一行也可以注释多行

三.选择语句

四.函数

五.数组

int arr [ 10 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }; 
  // 定义一个整形数组,最多放 10 个元素   其中arr[10]中的10是常量,[ ]里不可以放变量,前面的int指的是数组中元素的类型,不是数组的类型。数组中每个元素所占空间的大小一样

 printf("%d\n",arr[4]);     //下标的方式访问元素

六.操作符

操作符种类操作符作用
算数操作符
+   %
移位操作符
>>  <<  
将数据看成32bit位的二进制,再按照要求数据左移右移
(2进制)位操作符
&(按位与)   ^(按位异或)   |(按位或)

将数据换成2进制后,使用位操作符的两个数对比每个彼此对应的二进制位

& :对应的二进制位都为1  时,则为1;否则为0

^:相同,则为0;

     不同,则为1

|:只要对应的二进制位有一个是1,结果就是1,同为0,才是0

赋值操作符
+=  -=  *=  /=  &=  ^   |=      >>=   <<=

  单目操作符

   (只对一个变量进行操作)

!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof       操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--           前置、后置 --
++           前置、后置 ++
*           间接访问操作符 ( 解引用操作符 )
( 类型 )       强制类型转换

双目操作符

(对两个变量进行操作)

三目操作符

(对三个变量进行操作)

条件操作符中的 ?和 :
关系操作符
>
>=
<
<=
!=   用于测试 不相等
==       用于测试 相等
逻辑操作符
&&     逻辑与
||           逻辑或
条件操作符
exp1 ? exp2 : exp3
逗号表达式
exp1 , exp2 , exp3 , …expN
下标引用、函数调用和结构成员
[]   ()   .    ->

sizeof()计算的是变量/类型所占空间的大小,单位是字节,一个整型占四个字节:

 


P4-初始C语言(3)

只要是整数,内存中存储的都是二进制的补码

正数的原码,反码,补码都相同

负数存的是补码

原码:直接是按照正负写出的二进制序列

反码:原码的符号位不变,其他位按位取反得到的

补码:反码+1

 

 

 

 


一.常见关键字

关键字:register

 

关键字:signed,unsigned

关键字:typedef

关键字:static

static修饰局部变量:

  • 定义变量a不加static:

  • 定义变量a时,前面加static

 

static修饰全局变量

改变了变量的作用域,让静态的全局变量只能在自己所在的源文件内部使用,出了源文件就没办法再使用了

  • 定义全局变量时,前面不加static,可以正常运行:

 

 

  • 定义全局变量时,前面加static,运行报错(g_val为无法解析的外部符号):

 

 

 

static修饰函数

改变了函数的链接属性,使外部链接属性变成了内部链接属性

  • 定义函数时,不加static,可以正常运行:

  •  定义函数时,加static,运行报错(无法解析的外部符号)

 

二. #define定义常量和宏

//define定义标识符常量,定义MAX的值为1000
#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; 
}

int* p(可以理解成 p的类型是int*,但是*p告诉我们p是一个指针变量,指向的类型是int)

 

#include <stdio.h>
int main()
{
 char ch = 'w';
 char* pc = &ch;
 *pc = 'q';
 printf("%c\n", ch);
    return 0;
 }

输出q
#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
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个字节

P5-初始C语言(4)

结构体

结构体是 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);

 

  • 15
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值