300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c语言二级指针实现队列 C语言二级指针底层实现

c语言二级指针实现队列 C语言二级指针底层实现

时间:2022-06-29 18:20:46

相关推荐

c语言二级指针实现队列 C语言二级指针底层实现

C语言中,Pointers to Pointers,即二级指针。

一级指针和二级指针的值都是指向一个内存单元:

一级指针指向的内存单元存放的是源变量的值,

二级指针指向的内存单元存放的是一级指针的地址。

下面,我们通过如下代码展示二级指针的底层实现:

#include

int main(){

int a = 777;

int* b = &a;

int** c = &b;

*b = 888;

**c = 999;

printf("a=%d\n", a);

return 0;

}

假设:

栈的基地址为0,即rbp寄存器指向0;

栈的指针寄存器rsp指向地址为-32。

则,c语言语句**c = 999的底层实现过程如下图所示:

底层实现中,汇编语言首先找到c的值,通过c的值找到b的值,通过b的值找到a,并赋值999给a。

具体汇编代码如下:

.file "hlist.c"

.text

.section .rodata

.LC0:

.string "a=%d\n"

.text

.globl main

.type main, @function

main:

.LFB0:

.cfi_startproc

pushq %rbp

movq %rsp, %rbp

subq $32, %rsp // rsp 减去 32

movq %fs:40, %rax

movq %rax, -8(%rbp)

xorl %eax, %eax

movl $777, -28(%rbp) // 地址为-28处的存储单元的值为777,即a赋值为777

leaq -28(%rbp), %rax // 将-28地址(a的地址)赋给%rax

movq %rax, -24(%rbp) // 将-28(64位,8字节)值给地址为-24的存储单元

leaq -24(%rbp), %rax // 将-24地址(b的地址)赋给%rax

movq %rax, -16(%rbp) // 将b的地址赋值给地址为-16的存储单元

movq -24(%rbp), %rax // 将b的值(a的地址)赋值给%rax

movl $888, (%rax) // a = 888

movq -16(%rbp), %rax // 将c的值(b的地址)赋值给%rax

movq (%rax), %rax // 将b的值赋值给%rax

movl $999, (%rax) // a = 999

movl -28(%rbp), %eax

movl %eax, %esi

leaq .LC0(%rip), %rdi

movl $0, %eax

call printf@PLT

movl $0, %eax

movq -8(%rbp), %rdx

xorq %fs:40, %rdx

je .L3

call __stack_chk_fail@PLT

.L3:

leave

.cfi_def_cfa 7, 8

ret

.cfi_endproc

.LFE0:

.size main, .-main

.ident "GCC: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0"

.section .note.GNU-stack,"",@progbits

C语言 二级指针内存模型①

//二级指针第一种内存模型 #include #include //说明:①:类似于int a[5]={0},数组名a是一维数组a中首元素 ...

真正明白C语言二级指针(转载)

指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的 ...

C语言二级指针(指向指针的指针)

转载:/cpp/html/85.html 指针可以指向一份普通类型的数据,例如 int.double.char 等,也可以指向一份指针类型的数据,例如 in ...

真正明白c语言二级指针

指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的 ...

C语言 二级指针内存模型混合实战

//二级指针内存模型混合实战 #define _CRT_SECURE_NO_WARNINGS #include #include #i ...

C语言 二级指针内存模型③

//二级指针内存模型③ #define _CRT_SECURE_NO_WARNINGS #include #include #incl ...

C语言 二级指针内存模型②

//二级指针第二种内存模型 #define _CRT_SECURE_NO_WARNINGS #include #include #incl ...

c语言二级指针内存模型

第一种: 指针数组作为输入参数 char *myArray[] = {"aaaaaa", "ccccc", "bbbbbb", " ...

C语言二级指针间接赋值

重要意义:间接赋值的意义,实现了模块的功能划分,实现了软件作品的分层,使得模块接口和信息系统得以实现. 所谓二级指针就是指向指针的指针,其声明形式如下 int *p=NULL int **p1=NUL ...

随机推荐

JavaScript实现Ajax小结

置顶文章: 上一篇: 作者主页:myvin 博主QQ:851399101(点击QQ和博主发起临 ...

【Install】我是如何安装Linux类系统的

安装系统:ubuntu12.04 i386 DVD U盘启动12.04live系统 连线,设置连接 安装系统到硬盘 “语言支持”,更新 安装gnome经典界面 sudo apt-get i ...

开始认真学计算机网络----computer network学习笔记(一)

什么是计算机网络,就是连一堆计算机,计算机不单单指pc,还包括打印机啦,手机啦巴拉巴拉一堆 为什么要连,share data共享数据 数据? 文档,图片,视频,巴拉巴拉 网络有什么类型? LAN--- ...

LaTeX中用BibTex管理参考文献

BibTeX 是一种用来规范参考文献列表的一种文献管理软件,定义了一种比较通用的管理文献的格式, 用于协调LaTeX的参考文献处理. BibTeX使用数据库的的方式来管理参考文献. BibTeX 文 ...

修改tabbar 字体颜色

NSDictionary *seletedTextAttrs = @{NSForegroundColorAttributeName:[UIColor orangeColor]}; 修改tabbar 字 ...

linux 下搭建 ftp

最近为了方便目标板与PC机上LINUX之间的通讯,就在LINUX搭建了FTP,工作不难,写个总结.主要经过以下几个步骤: 1.检查是否安装了vsftpd服务器 可以用rpm -q vsftpd命令来查 ...

Logcat过滤及常见用法整理

Usage:logcat [options] [filterspecs] options include:-s Set default filter to silent. ...

动易CMS - 设为首页代码和加入收藏代码(兼容各种浏览器)

注意: 这里虽然说是兼容,但是有些浏览器的设置就是不支持用js来把页面设为首页,加入收藏夹,只能让用户手动去在浏览器或者按键去设置这些功能,这里说的兼容是指当浏览器有这个设置的时候js会有提示. ...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。