返回

初识C语言

发布时间:2023-01-07 12:42:14 395
# python# 数据

什么是C语言?

C语言是一门计算机语言

什么是计算机语言?

人和计算机交流的语言

C/C++/JAVA/python

语言的发展

二进制语言

硬件 - 电 - 正电1/负电0

手册 - 助记符(汇编语言)- B语言 - C语言、C++语言(高级语言)

 

C语言->早期不是很成熟->成熟->流行

国际标准ANSI C - C89/C90

C99/C11并不流行 - 不少编译器不支持

 

第一个C语言程序

1.创建工程(新建项目C++空项目)

2.添加源文件(视图-解决方案管理器)

.c - 源文件

.h - 头文件head

3.写代码

//包含一个叫stdio.h的文件
//std-标准standard input output
#include
//int是整型的意思
//main前面的int表示main函数调用返回一个整型值
int main()//主函数-程序的入口-main函数有且仅有一个
{
//这里完成任务
//在屏幕上输出hello world
//函数-print function-printf-打印函数
//库函数-C语言本身提供给我们使用的函数
//别人的东西-打招呼-#include
printf(“hello world\n”);
return 0;//返回0(整数)
}

 

数据类型

%d - 打印整型

%c - 打印字符

%f - 打印浮点数字-打小数

%p - 以地址的形式打印

%x - 打印16进制数字

 

char//字符数据类型 - 1byte

short int//短整型 - 2byte

int//整型 - 4byte

long//长整型 - 4/8byte(取决于平台)

long long//更长的整型 - 8byte

float//单精度浮点数 - 4byte

double//双精度浮点数 - 8byte

 

计算机中的单位

bit - 比特位(存一个二进制位1/0)

byte - 字节(1byte=8bit)

kb(1kb=1024byte)

mb(1mb=1024kb)

gb(1gb=1024mb)

tb(1tb=1024gb)

pb(1pb=1024tb)

#include 
int main()
{
char ch = ’A’;//内存
printf(“%c\n”,ch);//%c-打印字符格式的数据
}
#include 
int main()
{
int age = 20;
printf(“%d\n”,age);//%d-打印整型十进制数据
}

 

变量

定义变量:类型+变量名=内容,int age = 20;

全局变量 - 定义在代码块{}之外的变量

局部变量 - 定义在代码块{}内部的变量

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

#define _CRT_SECURE_NO_WARNINGS 1
//加在源文件的第一行
//运行“不安全”的函数,如scanf等
#include
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
//C语言语法规定,变量要定义在当前代码块的最前面,否则报错
//输入数据-使用输入函数scanf
scanf(“%d%d”,&num1,&num2);//取地址符号%
sum = num1 + num2;
printf(“sum = %d\n”,sum);
return 0;
}

 

变量的作用域和生命周期

作用域:这个变量哪里可以用,哪里就是它的作用域

局部变量的作用域是变量所在的局部范围

全局变量的作用域是整个工程

int main()
{
//g_val是另一个源文件里的全局变量
//需要声明extern外部符号
extern int g_val;
printf(“g_val = %d\n”,g_val);
return 0;
}

生命周期:变量的创建到销毁之间的一个时间段

局部变量的生命周期,是进入作用域生命周期开始,出作用域生命周期结束

全局变量的生命周期,是整个程序的生命周期

 

常量

1.字面常量
int main()
{
4;//字面常量,就是一个值
return 0;
}
2.const修饰的常变量
int main()
{
const int num = 4;//const修饰的常变量
//num是变量(一些需要用常量的函数不能用,如arr[num]会报错)
//num具有常属性(num的值不能改了)
}
3.#define定义的标识符常量
#define MAX 10
//#define 定义的标识符常量
int main()
{
int arr[MAX] = {0};//放在一些需要常量的函数内是可行的
return 0;
}
4.枚举常量
//枚举关键词-enum
//MALE,FEMALE,SECRET-枚举常量
#include
enum Sex
{
MALE,
FEMALE,
SECRET
}
int main()
{
enum Sex s = MALE;
printf("%d\n",MALE);//输出0
printf("%d\n",FEMALE);//输出1
printf("%d\n",SECRET);//输出2
return 0;
}

 

字符串

由双引号引起来的一串字符

int main()
{
"hello world";
"";//空字符串
return 0;
}
#include 
int main()
{
char arr1[] = "abc";//数组
//"abc"-'a' 'b' 'c' '\0'-'\0'是字符串的结束标志
//等价于char arr2[] = {'a','b','c',0};或者char arr2[] = {'a','b','c',‘\0’};
//如果是char arr2[] = {'a','b','c'};会输出abc后带随机值
printf("%s\n",arr1);
return 0;
}
#include 
int main()
{
char arr1[] = "abc";
char arr2[] = {'a','b','c'};
printf("%d\n",strlen(arr1));//strlen-string length
printf("%d\n",strlen(arr2));
return 0;
}
//输出结果是:3,随机值
//注意:‘\0’是结束标志,不算作字符的内容

ASCII编码

数据在计算机上存储的时候,存储的是二进制

ASCII编码,字符对应的值叫ASCII码值

初识C语言_指针

\0 - 0

0 - 48

a - 97

A - 65

 

转义字符

转变原来的意思

\?:在书写连续多个问号时使用,防止他们被解析成三字母词,使用后就是普通的连续问号

\':字符常量'

\":字符常量“

\\:防止\被解释为一个转义序列符,使用后就是普通的\

 

\a:警告字符,蜂鸣

\b:退格符

\f:进纸符

\n:换行

\r:回车

\t:水平制表符 - 一块空

\v:垂直制表符

 

\ddd:ddd表示1-3个八进制数

\xdd:dd表示2个十六进制数

#include 
#include
int main()
{
printf("%d\n",strlen("c:\test\32\test.c"));
return 0;
//结果输出为13
//“\t”是一个转义字符,“\32”也是一个转义字符
//“\32”指ASCII码为32(八进制)对应的字符,即ASCII码为26对应的字符“→”
}
#include 
#include
int main()
{
printf("%d\n",strlen("c:\test\382\test.c"));
return 0;
//结果输出为15
//“\t”是一个转义字符,“\3”也是一个转义字符
//注意:8不是八进制中的数字,故“\382”不是转义字符
}
#include 
#include
int main()
{
printf("%c\n","\x61");
return 0;
//结果输出为a
//“\x61”指ASCII码为61(十六进制)对应的字符,即ASCII码为97对应的字符“a”
}

 

注释

①/*……*/缺点是不能嵌套注释,一旦识别到*/就终止

/*
int main()
{
return 0;
}
*/
/*
int main()
{
/*
int a=10;
*/
return 0;
}
*/

②//可以注释一行也可以注释多行

 

选择语句

#include 
int main()
{
int coding = 0;
printf("你要好好学习吗?(要1/不要0):");
scanf("%d", &coding);
if(input == 1)
printf("好工作\n");
else
printf("卖红薯\n");
return 0;
}

 

循环语句

1.while语句

2.for 语句

3.do…while语句

#include 
int main()
{
int num = 1;
while(num < 20)
{
printf("敲一行代码:%d\n",num);
num++;
}
printf("敲完了\n");
return 0;
}

 

函数

#include 
int Add(int x, int y)
{
int z = x + y;
return z;
}
int main()
{
int num1 = 10;
int num2 = 20;
sum = Add(num1, num2);
printf("sum = %d\n", sum);
return 0;
}

 

数组

int main()
{
int arr[10];//定义一个存放10个整数数字的数组
char ch[20];//定义一个存放20个字符的数组
float arr2[5];//定义一个存放5个浮点数的数组
return 0;
}
#include 
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d\n",arr[4]);
return 0;
}
//输出为5
//数组的下标从0开始
#include 
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
while(i<10)
{
printf("%d ",arr[i]);
i++;
}
return 0;
}
//输出1 2 3 4 5 6 7 8 9 10

 

操作符

1.算数操作符

+  -  *  /  %(取余数)

 

2.移位操作符

左移<<  右移>>(移的是二进制位)

#include 
int main()
{
int a = 1;
int b = a<<1;
//整型占4个字节,即32个bit位
//a中存放的是00000000 00000000 00000000 00000001
//左边丢弃,右边补0:00000000 00000000 00000000 00000010,即2
printf("%d\n", b);
return 0;
}
3.位操作符

与&  异或^  或|

#include 
int main()
{
a = 3;
b = 5;
int c=a&b;
//a是011
//b是101
//同位都为1(真)才为1,c=001
printf("%d\n", c);
return 0;
}
//输出为1
#include 
int main()
{
a = 3;
b = 5;
int c=a|b;
//a是011
//b是101
//同位只要有1(真)就为1,c=111
printf("%d\n", c);
return 0;
}
//输出为7
#include 
int main()
{
a = 3;
b = 5;
int c=a^b;
//a是011
//b是101
//同位相同为0,相异为1,c=110
printf("%d\n", c);
return 0;
}
//输出为6
4.赋值操作符

=  +=  -=  *=  /=  ^=  |=  >>=  <<=

int main()
{
int a = 10;
a = 20;//赋值
a += 10;//复合赋值,等价于a = a + 10;其他同理
return 0;
}
5.单目操作符

!:逻辑反操作

#include 
int main()
{
//c语言中0表示假,所有非0表示真
int a = 10;
int b = 0;
printf("%d\n", !a);//输出0
printf("%d\n", !b);//输出1
return 0;
}

-:负值

+:正值

&:取地址

sizeof:操作数的类型长度(单位:字节)

#include 
int main()
{
int a = 10;
int arr[10] = {0};
int sz = 0;
sz = sizeof(arr)/sizeof(arr[0])
//sizeof 计算的是变量/类型所占空间的大小,单位是字节
printf("%d\n", sizeof(a));//输出4
printf("%d\n", sizeof(int));//输出4
printf("%d\n", sizeof a);//输出4,说明可省略括号
printf("%d\n", sizeof int);//报错!说明不可省略括号
printf("%d\n", sizeof(arr));//输出40
printf("sz = %d\n", sz);//输出10,计算元素个数
return 0;
}

~:对一个数的二进制按位取反

#include 
int main()
{
int a = 0;//4个字节,32bit位
int b = ~a;
printf("%d\n",b);//输出结果是原码,是-1
return 0;

//有符号的整型,第一位数是符号位(0为正,1为负)
//只要是整数,内存中存储的都是二进制【补码】
//正数:原码、反码、补码 相同
//负数:原码 → 符号位不变,其它位取反 → 反码 → +1 → 补码
// 补码 → -1 → 反码 → 符号位不变,其它位取反 → 原码

//00000000000000000000000000000000
//补码:11111111111111111111111111111111
//→反码:1111111111111111111111111111110
//→原码:1000000000000000000000000000001,即-1
}

++,--:前置、后置

#include 
int main()
{
int a = 10;

int b = a++;//后置++,先使用,自身再+1
printf("a = %d b = %d\n",a,b);//a = 11 b = 10

int b = ++a;//前置++,自身先+1,再使用
printf("a = %d b = %d\n",a,b);//a = 11 b = 11

int b = a--;//后置--,先使用,自身再-1
printf("a = %d b = %d\n",a,b);//a = 9 b = 10

int b = --a;//前置++,自身先-1,再使用
printf("a = %d b = %d\n",a,b);//a = 9 b = 9

return 0;
}

(类型):强制类型转换

int main()
{
int a = (int)3.14;
return 0;
}

&:取地址(详见【指针】)

*:间接访问操作符/解引用操作符

 

6.关系操作符

>  >=  <  <=  !=  == 

 

7.逻辑操作符

逻辑与&&,逻辑或||

0为假,非0为真

 

8.条件操作符/三目操作符

exp1 ? exp2 : exp3

int main()
{
int a = 10;
int b = 20;
int max = 0;
if (a>b)
max = a;
else
max = b;
return 0;
}

等价于

int main()
{
int a = 10;
int b = 20;
int max = 0;
max = (a > b ? a : b);
//若?前表达式为真,则值为a,否则值为b
return 0;
}
9.逗号表达式

exp1 , exp2,exp3,…,expN

 

10.下标引用、函数调用和结构成员

[]  ()  .  ->

int main()
{
int arr[10] = {0};
arr[4];//[] - 下标引用操作符
return 0;
}
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}

int main()
{
int a = 10;
int b = 20;
int sum = Add(a,b);//() - 函数调用操作符
return 0;
}

常见关键字

auto(自动,局部变量前都省略了)、break、case、char、const、continue、default、do、double、else、enum(枚举)、extern(引入外部符号)、float、for、goto、if、int、long、register(寄存器关键字)、return、short、signed(int = signed int)、sizeof、static、struct(结构体关键字)、switch、typeof、union(联合体/共用体)、unsigned、void、volatile、while

typedef(类型定义/类型重定义)

int main()
{
typedef unsigned int u_int;
unsigned int num1 = 20;
u_int num2 = 20;
//num1和num2的类型完全一样
return 0;
}

static(①修饰局部变量,使其生命周期变长;

②修饰全局变量,使其作用域变小,只能在自己所在的源文件内部使用;

③修饰函数,使其外部链接属性变为内部链接属性,只能在自己所在的源文件内部使用;)

#include 
void test()
{
static int a = 1;//a是一个静态的局部变量
a++;
printf("a = %d\n", a);//2 3 4 5 6
}

int main()
{
int i = 0;
while (i<5)
{
test();
i++;
}
return 0;
}
static int g_val = 2020;//这一行是写在另一个.c文件里的
//加了static会让下面的代码报错

#include
int main()
{
//extern - 声明外部符号的
extern int g_val;
printf("g_val = %d\n",g_val);
return 0;
}
static int Add(int x, int y)
{
int z = x + y;
return 0;
}
//以上代码是写在另一个.c文件里的
//加了static会让下面的代码报错

#include
extern in Add(int, int);
int main()
{
int a = 10;
int b = 20;
int sum = Add(a, b);
printf("sum = %d\n", sum);
return 0;
}

#define定义常量和宏

定义常量详见【常量】,定义宏:

#include 
//函数的定义
Max(int x, int y)
{
if (x > y)
return x;
else
return y;
}

//宏的定义
#define MAX(X,Y) (X>Y?X:Y)//只要输入MAX(X,Y),就会自动换成 X>Y?X:Y

int main()
{
int a = 10;
int b = 20;
//函数的方式
int max = Max(a, b);
printf("max = %d\n", max);
//宏的方式
max = MAX(a, b);
printf("max = %d\n", max);
return 0;
}

指针

int main()
{
int a = 10;//4个字节

int* p = &a;//指针变量:用来存放地址,&是取地址
printf("%p\n", p);//打印出a的地址

*p = 20;//* - 解引用操作符
printf("%p\n", a);//打印出20

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

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

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
switch学习 2023-01-07 12:11:56