C/C++语言的编译链接过程&&基本数据类型在32和64位操作系统下的大小

《大学开篇》🧐🧐🧐

大学之道,在明明德,在亲明,在止于至善。

知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。

物有本末,事有始终,知所先后,则近道矣。

在这里插入图片描述

1·C/C++语言的编译链接过程:

在Windows操作系统中,扩展名为: * .exe, * .bat , * .com等的文件是可以执行文件,可执行文件由指令和数据构成。

在Linux是靠文件属性来判断是否可执行

不可执行文件:其内容由数据构成。

在C/C++ 语言中 * .c/ * .cpp 源文件(文本),* .h 头文件(文本),* .i预编译文件(文本), *.s 汇编文件, *.o / * .obj二进制目标文件, *.exe 可执行文件

OwCFw8.png

2·进制转换

贪心减法

1286432168421
<>103-64=3939>32 39-32=77<167<87-4=33-2=11<=1
01100111

103(10)-> 011 001 11(2) -> 147(8) -> 67(16)

3·基本数据类型与大小

3·1在64位操作系统下:

基本数据类型所占字节
char1
bool1
short2
int4
long4
long long8
float4
double8
string40

3·2在32位操作系统下:

基本数据类型所占字节
char1
bool1
short2
int4
long4
long long8
float4
double8
string28

3.3测试代码

#include<iostream>
using namespace std;
int main() {
	cout << "char=" << sizeof(char) << endl;;
	cout << "short=" << sizeof(short) << endl;
	cout << "bool=" << sizeof(bool)<<endl;
	cout << "int=" << sizeof(int) << endl;
	cout << "long=" << sizeof(long) << endl;
	cout << "long long=" << sizeof(long long) << endl;
	cout << "float=" << sizeof(float) << endl;
	cout << "double=" << sizeof(double) << endl;
	cout << "string=" << sizeof(string) << endl;
	return  0;
}

4·定义与声明

4·1什么是定义?

为变量分配一块儿内存空间,并给其取个名字–一旦变量名与内存块匹配起来,它们就同生共死,并且这块儿内存的位置不能够被该变,一个区域内,只能被定义一次,不能够被多次定义。

4·2什么是声明

  1. 告诉编译器,这个名字已经匹配到一块儿内存上了。
  2. 告诉编译器,这个名字已经预定了,其它地方不能够使用这个了

4·3定义和声明的区别

定义创建了对象并为这个对象分配了一块儿内存空间,而声明是没有分配内存空间的

5·变量的作用域

  1. 全局变量:再函数外定义的变量
  2. 局部变量:在函数内部定义的变量
  3. 程序块中的变量:在程序块中定义的变量,只能在程序块中使用
int n;//全局变量
void fun(){
    //局部变量
    int age=10;
    int sum=100;
}
int main(){
    //块变量,在块之外不可以使用
    {
        int z=100;
        z+=10;
    }
    return 0;
}

6·c语言的常量

全局变量未初始化为0

局部变量未初始化则为一个随机值

6·1字面常量

int main(){
	int a=10;//10为一个字面常量,不可以对其赋值
	return 0;
}

6·2用#define定义的宏常量

定义的标识符不占内存空间,只是一个临时符号,预编译后这个符号就不存在了

6·3 用const关键字修饰的变量,称为常量

不论是局部常变量还是全局常变量,都需要进行初始化

#include <iostream>
using namespace std;
int main(){
    int const s=100;
    s=1000;//error 常变量不可以被修改
    return 0;
}
  1. 在C语言当中const修饰的长变量 –以变量为主

  2. 在C++当中以 常量为主 –在编译时进行替换

    ​ 例如:如下代码,在CPP中式正常的,在C语言中编译不通过

    int main(){
       int const len=10;
       int arr[len];
        return 0;
    }
    

6.3.1 #define与const的区别

  1. 宏是在预编译的时进行替换;const是在编译时进行替换
  2. #defines无类型是不开辟内存空间的;const会开辟内存空间

6·4枚举常量

枚举当中的值,称为枚举常量 枚举常量只能为整形

不初始化的值,则在上一个值的基础上+1

enum week{mon=1,tw=2,wen=3}

#include <iostream>
using namespace std;
enum week{one=1,two=2,three=3};
int main(){
   enum week x;
   x=one;
   cout <<x<<endl;
   x=two;
   cout<<x<<endl;
   x=three;
   cout <<x;
    return 0;
}

6·5 字符常量和字符串常量

字符对应字符
048
A65
a97
\n10
enter13
空格32

6.5.1空字符

char a=0;//0空字符 0
char c='0';//'0'=》48
char b='\0';//空字符 ASCALL 码为 0
//空格!=空字符

6.5.2 字符串C与C++都以\0结束

只要是 " " 就都以\0结束-占空间,但不计算长度

char char[]={"len"};
//最后一个字符以\0结束,表示但字符串的长度并不计算\0
//但\0占空间
```c


char a=0;//0空字符 0
char c='0';//'0'=》48
char b='\0';//空字符 ASCALL 码为 0
//空格!=空字符

6.5.2 字符串C与C++都以\0结束

**只要是“ ”**就都以\0结束-占空间,但不计算长度

char char[]={"len"};
//最后一个字符以\0结束,表示但字符串的长度并不计算\0
//但\0占空间
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HANWEN KE

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

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

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

打赏作者

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

抵扣说明:

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

余额充值