吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 206|回复: 5
收起左侧

[讨论] C/C++ 编程语言之 从汇编语言学习指针

[复制链接]
hongwenjun 发表于 2024-11-16 09:44
本帖最后由 hongwenjun 于 2024-11-16 11:28 编辑

指针声明指针是一种对象类型,它引用函数或另一种类型的对象,可以添加限定符。指针亦可以不引用任何内容,这通过一个特定的空指针值指示。
语法在指针声明的[color=var(--link-color)]声明文法中,类型说明符 序列代表所指向的类型(可以是函数或对象类型,可以是不完整类型),而声明符的形式为:* 属性说明符序列 (可选) 限定符序列 (可选) 声明符其中 声明符 可以是命名所声明指针的标识符,包括另一个指针声明符(这指示一个指向指针的指针):
[C] 纯文本查看 复制代码
float *p, **pp; // p 是指向 float 的指针
                // pp 是指向指向 float 指针的指针
int (*fp)(int); // fp 是指向类型 int(int) 为函数的指针

pn.png
我们使用 GCC 把定义指针的 代码,使用命令  gcc  pn.c  -S -o pn.asm 编译成汇编代码从右边的 asm 文件可以看到,只有  main函数的 分配栈代码和返回值 a0
所以指针对象如果没有指向实际的 C语言数据类型,编译器并没有生成实际代码,只是申明指针没有指向实体,并没有意义。

接下来,我们再来使用指针,指向一个 int 类型的变量

[C] 纯文本查看 复制代码
int n;
const int * pc = &n; // pc 是指向 const int 的非 const 指针
// *pc = 2; // 错误:不能通过不带转型的 pc 修改 n
pc = NULL; // OK:pc 自身可修改
 
int * const cp = &n; // cp 是一个指向非 const 的 int 的 const 指针
*cp = 2; // OK:通过 cp 修改 n
// cp = NULL; // 错误:cp 自身不能修改
 
int * const * pcp = &cp; // 指向指向非 const 的 int 的 const 指针的非 const 指针




123.png

观察右边的汇编代码,现在申明的指针会有真实的汇编代码了,如同普通变量一下,申请了内存地址,然后把应用对象的地址,保存到存放指针变量的地址里.
在汇编层次来说,指针和C语言其他变量类如int一样,并没有特殊性,都是分配内存,存储数字。


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

MRfanm 发表于 2024-11-16 13:40
学习学习
laotzudao0 发表于 2024-11-16 13:41
wuboxun 发表于 2024-11-16 13:44
3291952274 发表于 2024-11-16 13:58
学习知识
lq40955 发表于 2024-11-16 22:10
学习一下。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表