数据结构day2

数据结构day2

条件与循环

1.if..else..

if(条件(bool)){

}else{

}

if(A){
	B;
}else{
	C;
}
D;

我们进入B还是进入C依赖于最开始A的结果,无论里面对A进行什么样的操作

2.for语句

![image-20250513150731855](/Users/tusier/Library/Application Support/typora-user-images/image-20250513150731855.png)

比较基础,看看就行,当最后执行完i++后,会再去进行判断i是否小于4,而不是直接跳出去执行E

地址与指针

3.内存

内存是由一个一个的单元组成的,日常计算机中,计算机都是以字节编址的,一个单元即为一个字节即为B英文(Byte)

而计算机是二进制的,一位二进制可以表达为0or1 即为b英文 Bit

一个单位下可以放下【10010001】也就是8位的二进制位

因此一个字节=8位二进制位

4.地址

0 1 2 3 4 5 6 7
8

我们把内存的每一个单元格从0开始标上序号,每个单元格都有属于它自己的序号,这个序号就是当前单元格的地址

因此单元的地址多少与单元的内容无关,而与它是存储器中第几个单元有关

5.单位量级

常识,直接看表格

单位 量级 单位 量级
T 2^40 或10^12
G 2^30 或10^9
M 2^20 或10^6
k 10^3 K 2^10 (1024)
本身 1
m 10^-3
u 10^-6
n 10^-9
p 10^-12
f 10^-15

6.申请内存

int a=0

这行代码申明了一个int类型,那么在运行的时候,进程就会在内存中为变量a申请到一个足够放下int的空间

int的数据范围是-2^31 到 2^31-1 ,一共是2^32 个数字,需要32个二进制位,也就是32b=4B

因此一个int需要4B的内存

下面是c艹的数据类型使用内存列表

数据类型 空间
char 1B
short 2B
int 4B
float 4B
double 8B

7.取址符&

#include <iostream>
using namespace std;
int main(){
    int a=10;
    cout<< &a << endl;
}

在元素前加入&,就可以输出当前它所在的内存的位置

8.首址

假如我们一个int占用了 4/5/6/7 这四个单元,那么这个int的地址为4

我们用取址符输出的皆取它最小的那个值,作为首地址

9.指针

对于内存空间来说,无论是指令还是数据,都要通过对应单元的地址取访问内存单元中的内容,

但是c/c艹语言将【通过地址摆弄数据】的权力,交给了【程序员】,这是其它高级语言所不具备的,

这个权力就是【指针】或者【指针变量】

0 1 2 3 4 5 6 7
8
16
24
32
p p p p
48
56

比如说,系统吧4/5/6/7分配给了变量a,它的地址是4

现在我们重新取申请一个变量p,用p去存放a的地址(4),也就是我们将a的地址保存进了另一个变量p中,我们称p为a的指针

这里a的数据类型是int

p的目的是为了存放a的地址,所以

p的数据类型是int*

如果我们要防止一个数据double

那么它的指针的数据类型为double*

10.*

#include <iostream>
using namespace std;
int main(){
    int a=10;
    int* q=&a;
    cout<< &a << endl;
    cout<<q<<endl;
    cout<< &q << endl;
}

作用1:数据类型*=变量的地址;

int* q=&a;

说明这里的q存放的是a的地址

作用2:解引用

这是最关键的一个作用

#include <iostream>
using namespace std;
int main(){
    int a=10;
    int* q=&a;
    int b=*q;
  	//等同于(b=a)
}

*指针变量:就能通过这个指针变量里存放的地址访问到对应的变量,

比如说*q在这里可以访问到a

&是通过变量求地址,*是通过地址求变量

&a的结果是q,*q的结果是a

本质上a和q都是变量,没有层次的差别,只是数据类型不一样


posted @ 2025-05-20 08:59  是我,米老鼠  阅读(12)  评论(0)    收藏  举报