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语言学习笔记1 -> 正文阅读

[C++知识库]C语言学习笔记1

单精度浮点数和双精度浮点数的区别

  • 在内存中占有的字节数不同
    单精度浮点数在机内占4个字节(32位),包括符号位1位,指数8位,尾数23位;
    双精度浮点数在机内占8个字节(64位),包括符号位1位,指数11位,尾数52位。
  • 有效数字位数不同
    单精度浮点数有效数字8位,
    双精度浮点数有效数字16位;
  • 所存的数值范围不同
    单精度浮点的表示范围-3.40E+38-+3.40E+38,
    双精度浮点的表示范围1.79E+308-+1.79E+308;
  • 在程序中处理速度不同
    一般CPU处理单精度浮点数的速度比处理双精度浮点数快。

常用数据类型

类型类型标识符字节
字符型char1
短整型short2
整型int4
长整型long4/8
长整型long long8
单精度浮点型float4
双精度浮点型double8
#include <stdio.h>
int main()
{
	printf("char占用的字节大小:%d\n", sizeof(char));
	printf("short占用的字节大小:%d\n", sizeof(short));
	printf("int占用的字节大小:%d\n", sizeof(int));
	printf("long占用的字节大小:%d\n", sizeof(long));
	printf("long long占用的字节大小:%d\n", sizeof(long long));
	printf("float占用的字节大小:%d\n", sizeof(float));
	printf("double占用的字节大小:%d\n", sizeof(double));
	return 0;
}

在这里插入图片描述
注:C语言规定sizeof(long)>=sizeof(int),因此long类型占用的字节数可以为4,也可以为8,具体取决于平台。

计算机中的单位

bit–比特位
byte–字节
kb
mb
gb
tb
pb

变量与常量

变量

全局变量–定义在代码块({})之外的变量;
局部变量–定义在代码块({})内部的变量;
局部变量和全局变量的名字不要相同,容易误会,产生bug;当局部变量和全局变量的名字相同的时候,局部变量优先;
若是在一个.c文件中的全局变量需要在另一个.c调用时,需要用extern声明外部符号。

在这里插入图片描述

变量的作用域和生命周期

作用域

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

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

生命周期

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

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

常量

C语言中的常量和变量的定义形式有所差异。
C语言中的常量分为以下几种:

  • 字面常量
  • const修饰的常变量
  • #define定义的标识符常量
  • 枚举常量enum

字符串+转义字符+注释

字符串

"hello world!\n"
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

注:字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算作字符串内容。

#include <stdio.h>
int main()
{
	char arr1[] = "wednesday";
	printf("arr1=%s\n",arr1);
	char arr2[] = {'w','e','d','n','e','s','d','a','y'};
	// arr2中字符末尾没有结束标志,只有搜索到\0时计算机才认为字符串结束。
	printf("arr2=%s\n", arr2);
	char arr3[] = { 'w','e','d','n','e','s','d','a','y','\0'};
	printf("arr3=%s\n", arr3);
	return 0;
}

在这里插入图片描述

循环语句

  • while语句
  • for语句
  • do ... while语句

不借助第三变量交换两个变量

方法一

#include <stdio.h>
int main()
{
	// 交换两个整型变量
	int a = 3;
	int b = 5;
	printf("交换前:a=%d,b=%d\n", a, b);

	a = a + b; // a为a+b b还是b
	b = a - b; // a为a+b b为a
	a = a - b; // a为b   b为a
	printf("交换后:a=%d,b=%d\n", a, b);
	return 0;
}

存在的问题:
int-4个字节-32bit位-最大可表示数2147483647
若a或b的数值较大的时候,会存在溢出问题!!!

方法二

#include <stdio.h>
int main()
{
	// 交换两个整型变量
	int a = 3;
	int b = 5;
	printf("交换前:a=%d,b=%d\n", a, b);
	// ^:按(二进制)位异或
	a = a ^ b; // a为110,b仍为101
	b = a ^ b; // a为110,b变为011
	a = a ^ b; // a为101,b为011
	printf("交换后:a=%d,b=%d\n", a, b);
	return 0;
}

该方法没有使用第三变量,也不会溢出

实际编程:采用第三变量的方法,代码的可读性高,执行效率高
异或操作:可读性差,执行效率低于其他方法!

找出只出现一次的数

给定一个非空整型数组,除了某个元素只出现一次之外,其余每个元素均出现两次,找出那个只出现了一次的元素。

方法一

#include <stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,1,2,3,4 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i, j;
	for (i = 0; i < sz; i++)
	{
		int count = 0;
		for (j = 0; j < sz; j++)
		{
			if (arr[i] == arr[j])
				count++;
		}
		if (count == 1)
			printf("%d\n", arr[i]);
	}
	return 0;
}

暴力求解,循环次数为n^2.

方法二

#include <stdio.h>
int main()
{
	// a^a=0 a^0=a
	// 1^1^2^2^3^3^4^4^5=5
	// 异或满足交换律
	int arr[] = { 1,2,3,4,5,1,2,3,4 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i;
	int result = 0;
	for (i = 0; i < sz; i++)
	{
		result ^= arr[i];
	}
	printf("%d\n", result);
	return 0;
}

循环次数为n.

原码、反码、补码

负数在内存中存储的时候,存储的是二进制补码;但在使用时,打印的是负数的原码

常见关键字

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

类型定义,这里应该理解为类型重命名。

关键字register

  • 计算机存储数据(从上到下,速度越来越慢,大小越来越大)
  • 寄存器
  • 高速缓存
  • 内存 – 4G/8G/16G
  • 硬盘 – 500G

关键字static

  • 修饰局部变量时,局部变量的生命周期变长;
  • 修饰全局变量时,改变了变量的作用域,让静态的全局变量只能在自己所在的源文件内部使用,出了源文件就没法再使用了;
  • 修饰函数时,改变了函数的链接属性,外部链接属性–>内部链接属性

#define定义常量和宏

指针

1. 取地址运算符&

2. 定义指针变量

定义指针变量的一般形式如下:
类型说明符* 指针变量名

说明:
(1)类型说明符是指指针变量所指向的变量的数据类型,称为指针的基类型,即指针的指向类型。例如:
float* fp;    // fp是浮点型指针,指向浮点型变量
char* cp;     // cp是字符型指针,指向字符型变量
(2)*在这里是指针声明符,表示定义的是一个指针变量。

3. 指针运算符*

解引用操作符,用于一个地址之前,表示取*后指针变量指向内存单元中的内容。

指针变量的大小

指针大小在32位平台是4个字节,64位平台是8个字节。

#include <stdio.h>
int main()
{
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(double*));
	return 0;
}

结构体

由不同类型数据组成的组合型数据结构。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:27:06  更:2021-11-19 17:27:33 
 
开发: 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年11日历 -2024/11/28 1:16:18-

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