IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 初始C语言 -> 正文阅读

[C++知识库]初始C语言

什么是C语言

C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象的编程语言有所不同。

第一个C语言程序

#include<stdio.h>   //引入头文件 标准输入输出
//主函数,一个工程只能有一个主函数
int main()
{
	printf("Hello world!\n");
	return 0;
}

数据类型

整型不带小数点
char			//字符数据类型
short			//短整型
int				//整型
long			//长整型
long long		//更长的整型
------------------------------
浮点型带小数点
float			//单精度浮点型
double			//双精度浮点型
void main()
{
	//定义变量-->开辟空间
	char ch;
	int i;
	float f;
}

求各个数据类型的字节大小?
可以利用sizeof操作符求数据类型的大小

#include<stdio.h>
#include<stdbool.h>
void main()
{
	printf("%d\n", sizeof(char));
	printf("%d\n", sizeof(short));
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(float));
	printf("%d\n", sizeof(double));
	printf("%d\n", sizeof(long));
	printf("%d\n", sizeof(long long));
	printf("%d\n", sizeof(bool));    //需要引入头文件stdbool.h
}

运行结果:

1
2
4
4
8
4
8
1

容量单位:bit,byte,kb,mb,gb,tb,pb

1byte = 8bit
1k = 1024k
1g = 1024m
1t = 1024g
1p = 1024t

数据在计算机中以二进制形式存储
二进制:0 1
八进制:0 1 2 3 4 5 6 7
十进制:0 1 2 3 4 5 6 7 8 9
十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F

void main()
{
	char ch = 'A';  //初始化
	short s = 10;
	int i = 100;
	double d = 12.34;
}

开辟一块空间为其命名,并且初始化
在这里插入图片描述

变量

变量的分类:局部变量、全局变量

//全局变量
int x = 0;
void main()
{
	//局部变量
	char ch = '0';
	int a = 0;
}
int number = 20;  //全局变量
int main()
{
	int number = 10;  //局部变量
	printf("%d", number);
	return 0;
}

运行结果:

10

全局变量和局部变量可以同名(在我看来,能不同名就不同名),优先使用局部变量,局部变量的作用域是变量所在的局部范围,生命周期是进入作用域开始,离开作用域结束;全局变量的作用域是整个工程,生命周期也是整个工程。

scanf函数和printf函数的使用

void main()
{
	int a, b;
	printf("input a and b:>");
	scanf("%d %d", &a, &b);  //取地址
	int res = a + b;
	printf("res = %d\n", res);
}

运行结果:

input a and b:>10 20   
res = 30
请按任意键继续. . .

注意点

scanf("%d %d\n", &a, &b);   //错误,不能有\n
input a and b:>10,20        //错误,输入10和20中间用空格分隔
error C4996: 'scanf': This function or variable may be unsafe. 
//需要在最前面加一句  #define _CRT_SECURE_NO_WARNINGS
void main()
{
	char ch = 'A';
	short s = 10;
	int i = 100;
	double d = 12.34;
	char *str = "Hello";
	size_t size = 100;   //unsigned int

	printf("ch = %c\n", ch);
	printf("s = %d\n", s);
	printf("d = %lf\n", d);
	printf("str = %s\n", str);
	printf("size = %u\n", size);
}

运行结果:

ch = A
s = 10
d = 12.340000
str = Hello
size = 100
请按任意键继续. . .

变量的作用域和生命周期

作用域

作用域,程序设计概念,通常来说,一段程序代码所用到的名字并不是总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域

1.局部变量的作用域时变量所在的局部范围
2.全局变量的作用域是整个工程

生命周期

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

1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束
2.全局变量的生命周期是:整个程序的生命周期

int x = 1;
void fun()
{
	printf("x = %d\n", x);
}
void main()
{
	int a = 10;
	printf("x = %d\n", x);
	printf("a = %d\n", a);
	{
		int b = 20;      //b只能在此大括号中使用
		printf("b = %d\n", b);
		printf("x = %d\n", x);
	}
	//printf("b = %d\n", b);   
	printf("a = %d\n", a);
	printf("x = %d\n", x);
}

运行结果:

x = 1
a = 10
b = 20
x = 1
a = 10
x = 1
请按任意键继续. .

常量

常量的分类:字面常量、const修饰的常变量、#define定义的标识符常量、枚举常量

#define PI 3.14
enum season
{
	spring, //0
	summer,
	autumn,
	winter
};
int main()
{
	const int num1 = 10;
	return 0;
}

字符串、转义字符、注释

字符串

'A';     //字符
”A“;     //字符串 隐含一个\0

这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
注:字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算字符串内容。

void main()
{
	//size_t strlen ( const char * str );  //获取字符串的长度
	printf("%d\n", strlen("abcxyz"));
	return 0;
}

运行结果:

6
void main()
{
	printf("%d\n", strlen("abc\0xyz"));
	return 0;
}

运行结果:

3
//C没有字符串类型
void main()
{
	char ar[] = "bit";
	char br[] = {'b','i','t','\0'};
	char cr[] = {'b','i','t'};
	char *str = "Hello Bit";

	printf("%d\n", strlen(ar));
	printf("%d\n", strlen(br));
	printf("%d\n", strlen(cr)); //? 随机值
}

运行结果:

3
3
15  -> 随机值

/0 是字符串的结束标志

转义字符

//转义字符
void main()
{
	char *str = "C:\\Program Files (x86)\\Google";
	char *str1 = "Hello \"world\"";
	char *str2 = "Hello \'world\'";
	printf("str = %s \n", str);
 	printf("str1 = %s \n", str1);
	printf("str2 = %s \n", str2);
}

运行结果:

str = C:\Program Files (x86)\Google
str1 = Hello "world"
str2 = Hello 'world'
请按任意键继续. . .
转义字符释义
\?在书写连续多个问号时使用,防止他们被解析成三字母词
\’用于表示字符常量’
\“用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字。 如: \130 X
\xdddd表示2个十六进制数字。 如: \x30 0
void main()
{
	//'\0' != '0'
	//'\0' == 0
	char br[] = { 'b', '\0', 'i', 't' };
	char cr[] = { 'b', 0, 'i', 't' };
	printf("%d\n", strlen(br));
	printf("%d\n", strlen(cr));

	char ch = '5';    //存储字符5的ASCII码值
	char ch1 = '\5';  //存储数字5
}

\0其实就是数字0
运行结果:

1
1
Enter    回车键   \r+\n
\r是表示让光标回到行首
\n是让光标走到下一行 
void main()
{
	char ch = '\123';
	char ch1 = '\1234';   //超过三位不在表示为八进制
	char ch2 = '\183';    //不是八进制,八进制中没有8
	printf("%d\n", ch);   //83
	printf("%d\n", ch1);  //52 - 字符'4'
}

运行结果:

83
52
int main()
{
    printf("%d\n", strlen("c:\test\328\test.c"));
    return 0;
}

运行结果:

14
c : \t e s t \32 8 \t e s t . c

注释

int Add(int x, int y)
{
    return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{
    return x-y;
}
*/
int main()
{
    //C++注释风格
    //int a = 10;
    //调用Add函数,完成加法
    printf("%d\n", Add(1, 2));
    return 0;
}

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

#if 0

int main()
{
	printf("%d\n", strlen("c:\test\328\test.c"));
	return 0;
}

#endif

选择语句

void main()
{
	int value;
	printf("input value:>");
	scanf("%d", &value);
	if(value > 100)   
	{
		printf("OK.\n");  //条件成立
	}
	else
	{
		printf("NO.\n");  //条件不成立
	}
}

运行结果:

input value:>100 
NO.
请按任意键继续. . .
void main()
{
	if (-1)
	{
		printf("-1\n");
	}
	if (0)
	{
		printf("0\n");   //不执行
	}
	if (1)
	{
		printf("1\n");
	}
}

运行结果:

-1
1

0为假,正数和负数都为真

三种if选择语句格式
if()
{}

if()
{}
else
{}

if()
{}
else if()
{}
else if()
{}
...
else
{}

循环语句

while循环–先判断条件是否成立,再执行循环体

void main()
{
	int count = 0;
	while (count < 100)
	{
		printf("count = %d\n", count);
		count++;
	}
	printf("\n");
}

运行结果:

0
1
...
99

do while循环–先执行循环体,再判断条件是否成立

void main()
{
	int count = 0;
	do
	{
		printf("count = %d\n", count);
		count++;
	}while(count < 100);
	printf("\n");
}

运行结果:

0
1
...
99

for循环

void main()
{
	for (int count = 0; count<100; ++count)
	{
		printf("count = %d\n", count);
	}
}

运行结果:

0
1
...
99

前置++和后置++

前置++,先自身加1,再进行赋值

void main()
{
	int value = 0;
	int result = ++value; //value += 1; int result = value; 
	
	printf("value = %d\n", value);
	printf("result = %d\n",result);
}

运行结果:

value = 1
result = 1

后置++,先进行赋值,再自身加1

void main()
{
	int value = 0;
	int result = value++; //int result = value;  value=value+1;

	printf("value = %d\n", value);
	printf("result = %d\n", result);
}

运行结果:

value = 1
result = 0

函数

//函数 功能 过程
int Add(int a, int b)
{
	return a + b;
}

int Sub(int a, int b)
{
	return a - b;
}

void main()
{
	int a = 10;
	int b = 20;
	int x = 100;
	int y = 200;

	int sum = Add(a, b);
	int sum1 = Add(x, y);
}

函数的特点就是简化代码,减少代码复用。

数组

定义一个大小为10的整型数组,访问下标是0到9

void main()
{
	int ar[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; //数组定义
	for (int i = 0; i<10; ++i)
	{
		printf("%d ", ar[i]);
	}
	printf("\n");
}

运行结果:

1 2 3 4 5 6 7 8 9 10

操作符

算术操作符

+ - * / %

移位操作符

<<  >>

位操作符

&  ^  |
void main()
{
	int a = 10;
	int b = 6;

	int res1 = a & b;   //1010 & 0110 = 0010
	int res2 = a | b;   //1010 | 0110 = 1110
	int res3 = a ^ b;   //1010 ^ 0110 = 1100
	int res4 = ~a;      //-11
	int res5 = a >> 2;  //1010 >> 2 =0010
	printf("res1 = %d\n", res1);
	printf("res2 = %d\n", res2);
	printf("res3 = %d\n", res3);
	printf("res4 = %d\n", res4);
	printf("res5 = %d\n", res5);
}

运行结果:

res1 = 2
res2 = 14
res3 = 12
res4 = -11
res5 = 2

赋值操作符

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

单目操作符

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

关系操作符

>  >=  <  <=  !=  ==

逻辑操作符

&&     逻辑与
||     逻辑或

逻辑与–有假则假

ab结果
000
010
100
111

逻辑或–有真则真

ab结果
000
011
101
111
//逻辑
void main()
{
	int a = 10;
	int b = 10;
	
	int result = a || ++b; //短路求值,没有执行++b

	printf("result = %d\n", result);
	printf("b = %d\n", b);
}

运行结果:

result = 1
b = 10

|| 或运算符左侧为真,则结果必为真,无须执行右侧

//逻辑
void main()
{
	int a = 0;
	int b = 10;

	int result = a && ++b; //短路求值

	printf("result = %d\n", result);
	printf("b = %d\n", b);
}

运行结果:

result = 0
b = 10

&& 与运算符左侧为假,则结果必为假,无须执行右侧

条件表达式

exp1 ? exp2 : exp3    //如果exp1成立,则执行exp2,否则执行exp3
int Max(int a, int b)
{
	return a > b ? a : b;  //if  //三目   ?   :
}

void main()
{
	int val = (1,2,3,4,5,6);   //val = 6
	int a = 10;
	int b = 20;
	int max_value = Max(a, b);
	printf("max value = %d\n", max_value);
	printf("val = %d\n",val);
}

运行结果:

max value = 20
val = 6

逗号表达式

exp1, exp2, exp3, …expN

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

[] () . ->

常见关键字

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 u_int;
typedef unsigned int pid_t;

void main()
{
	unsigned int a;
	u_int aa;   //与上面等价

	unsigned long b;
}

关键字 static

在c语言中,static是用来修饰变量和函数的

1.修饰局部变量-静态局部变量
2.修饰全局变量-静态全局变量
3.修饰函数-静态函数

void test()
{
	static int i = 0;  //记忆性
	i++;
	printf("%d ", i);
}

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		test();
	}
	return 0;
}

运行结果:

1 2 3 4 5 6 7 8 9 10 
int i = 0;    
//全局变量,在同一工程下的其他的文件中,extern int i;声明之后就可以使用
void fun()    
{}
//全局函数,在同一工程下的其他的文件中,extern void fun();声明之后就可以使用
static int i = 0;     
//静态修饰的全局变量,只能在当前文件中使用,即便extern也不行
static  void fun()    
{}
//静态修饰的函数,只能在当前文件中使用,即便extern也不行

指针

void main()
{
	int a = 10;
	printf("a address = %p\n", &a);
	int *p = &a;   //p是一个指针,存放a的地址
	return 0;
}

运行结果:

a address = 00B8F950
请按任意键继续. . .

在这里插入图片描述
在32位平台下,指针大小为四个字节,64位平台下,指针大小位八个字节

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

运行结果:

4
4
4
4

结构体

struct Student
{
	char name[10];
	int age;
	float weight;
};

void main()
{
	struct Student s = {"赛文", 10, 120.8};
	printf("%s %d %f\n", s.name, s.age, s.weight);
}

运行结果:

赛文 10 120.800003
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 10:59:30  更:2022-05-05 11:02:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:17:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码