当前位置: 首页 > news >正文

C语言——地址和指针

一.地址

在C语言中,使用取地址符&获取内存中数据的地址

#include<stdio.h> int main() { int a = 0; scanf("%d", &a); printf("%d", &a); return 0; }

二.指针

1.声明指针变量

基类型 *变量名

int* p; int *p; int * p;

2.&变量名赋值

#include<stdio.h> int main() { int a = 5; int* p = &a; printf("%p", p); printf("%p",*p); return 0; }

3.指针变量赋值

int main() { int a = 5; int* p = &a; int* q = p; printf("%p", q); return 0; }

4.赋空值

#include<stdio.h> int main() { int a = 5; int* p = NULL; printf("%p", p); return 0; }

三.动态分配存储空间

1.函数malloc()

函数malloc()只有一个参数,该函数可以动态申请一个连续的存储空间,并返回该存储空间的首地址。不对数据进行初始化。

(基类型*)malloc(sizeof(数据类型)* number);
#include<stdio.h> #include<stdlib.h> int main() { int* p = (int*)malloc(sizeof(int) * 1); printf("%p", p); return 0; }

2.函数calloc()

函数calloc()有两个参数,第一个参数规定申请几个单位存储空间,第二个参数规定申请单位存储空间的大小。将数据初始化为0。

(基类型*)calloc(number, sizeof(数据类型));
#include<stdio.h> #include<stdlib.h> int main() { char* p = (char*)calloc(sizeof(char), 2); printf("%p", p); return 0; }

3.函数free()

使用此函数回收动态申请的存储空间。

free(指针变量名);
#include<stdio.h> #include<stdlib.h> int main() { char* p = (char*)calloc(sizeof(char), 2); printf("%p", p); free(p); p = NULL; return 0; }

四.二级指针和多级指针

1.二级指针

数据类型**变量名
#include<stdio.h> int main() { int a = 1; int* p = &a; int** q = &p; printf("%p", p); printf("%p", q); printf("%d",**q); return 0; }

2.多级指针

多级指针变量只能存放其上级指针变量的地址

#include<stdio.h> int main() { int a = 1; int* p = &a; int** q = &p; int*** i = &q; int**** j = &i; printf("%p", p); printf("%p", q); printf("%d",**q); printf("%d", ***i); return 0; }

五.指针应用

1.处理字符串:abcde是常量字符串,用const修饰,确保不会改动

int main() { const char* p = "abcde"; for (int i = 0; i < 5; i++) { printf("%c", *p); p++; } return 0; }

2.作为函数形参

#include<stdio.h> int sum(int* x, int y) { *x = *x + 1; y = y + 1; return 0; } int main() { int a = 1, b = 2; int* p = &a; sum(p, b); printf("%d%d", a, b); return 0; }

3.作为函数返回值(指针函数)

#include<stdio.h> int* s(int x) { int* c = &x; return c; } int main() { int a = 1; printf("%p", s(a)); return 0; }

4.函数指针

函数指针是指向函数的地址。通过函数指针变量可以访问函数的地址。

基类型(*函数名)(数据类型 参数);
#include<stdio.h> int add(int x, int y) { return x + y; } int sub(int x, int y) { return x - y; } int main() { int(*fw)(int a, int b); fw = add; printf("%d", (*fw)(5, 4)); fw = &sub; printf("%d", fw(5, 4)); return 0; }
http://www.jsqmd.com/news/528743/

相关文章:

  • 终极数字填色画生成器:从图片到艺术品的完整指南
  • 探索D4RL:构建离线强化学习研究的完整指南
  • prisma的核心命令
  • 从ChatGPT到DeepSeek:5个真实业务场景,带你重新理解大模型评测的“有效性”
  • 国内知名的企业级Agent智能体厂商有哪些?2026年企业级AI Agent落地架构与主流厂商深度拆解
  • HG-ha/MTools物联网整合:嵌入智能终端设备的可能性
  • Bypass Paywalls Clean完全使用指南:从安装到高级配置
  • 数据安全必修课:开源工具实现数据备份与迁移的全流程防护指南
  • 云手机 批量管理工具
  • SpringBoot项目如何优雅实现Word模板导出?POI与EasyPoi对比评测
  • 2026年微波加热/烘干/干燥设备厂家推荐:上海楚尚机械有限公司,全系微波设备专业供应 - 品牌推荐官
  • 垂直裂缝下COMSOL水力压裂相场模拟:PDE接口与达西定律联合固体力学解析
  • 从科研到消费级:EEG技术如何通过Muse头环走进日常生活(含最新Muse S Athena评测)
  • 别再用ps aux硬扛了!用这套工业级Python内存泄漏检测工具,将平均定位时间从6.2小时压缩至97秒
  • 颠覆传统陪玩运营模式!全开源游戏电竞护航陪玩源码系统 小程序 H5 多端全覆盖 解锁电竞商业新蓝海 - 壹软科技
  • 颠覆式高效工作流:Obsidian Advanced Slides重塑知识管理与演示体验
  • 构建企业级知识库:利用MiniCPM-o-4.5-nvidia-FlagOS与网络技术
  • Bochs配置避坑指南:从‘not a bootable disk‘到成功启动的完整流程
  • Windows窗口置顶神器:AlwaysOnTop终极效率指南
  • OpenClaw+GLM-4.7-Flash快捷指令:5个提升效率的预设命令
  • 2026年深圳文件销毁公司推荐:深圳八方园通,纸质/保密/硬盘/药品/档案销毁一站式解决方案 - 品牌推荐官
  • kubernetes 开发进阶 看懂/client-go/kubernetes/clientset.go
  • 突破性人脸检测技术方案:YOLOv8-face解决复杂场景识别挑战
  • 开源物联网平台
  • 2026年集装箱翻转设备厂家推荐:山东金贯通用机械有限公司全系产品解析,覆盖多场景需求 - 品牌推荐官
  • Android 10.0 SystemUI中通过属性控制振动图标在状态栏显示
  • 推荐一款国产好用的Agent(智能体)构建平台:深度拆解主流国产Agent的技术架构与落地路径
  • UndertaleModTool技术解密:开源工具实现游戏深度定制的创新方法指南
  • 2026年湖南1688代运营公司推荐:湖南思洋集团控股有限公司,1688店铺代运营公司精选 - 品牌推荐官
  • 小米智能家居终极指南:如何用Xiaomi Miot插件统一管理你的全屋设备