c语言指针的指针

article/2025/10/21 17:50:20

1、情况

c语言指针的指针,还是比较常用的一个功能;当然,我也相信,一些用C语言很长时间的人,也没大用过,因为用不到,这是工作需求决定的,但总体来说,还是经常用的。
理解了指针的指针,我感觉才是真正理解了指针的含义

2、定义

指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。

C 中指向指针的指针
一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。例如,下面声明了一个指向 int 类型指针的指针:
int **var;


 3、失败的实例


1 #include <stdio.h>2 #include <string.h>3 #include <memory.h>4 #include <stdlib.h>5 6 void getMemory(char *p, int num)7 {8  printf("enter function getMemory\r\n");9  printf("p=%p,&p=%p\r\n", p, &p);10  p = (char *)malloc(sizeof(char) * num);11  printf("p=%p,&p=%p\r\n", p, &p);12  printf("exit function getMemory\r\n");13 }14 15 int main()16 {17   char *str = NULL;18   printf("str=%p,&str=%p\r\n", str, &str);19   getMemory(str, 100);20   strcpy(str, "hello");21   printf("str=%s\r\n", str);22   printf("str=%p\r\n", str);23   printf("&str=%p\r\n", &str);24   free(str);25 26 }
~                                                                                                                                                                                                                                                                                 
~                                                                                                                                                                                              
"test2.c" 26L, 538C 已写入             root@mkx:~/learn/getMemory# ./test2
str=(nil),&str=0x7ffd24ae73c0
enter function getMemory
p=(nil),&p=0x7ffd24ae73a8
p=0x6a9420,&p=0x7ffd24ae73a8
exit function getMemory
段错误 (核心已转储)
root@mkx:~/learn/getMemory# 

4、成功的实例

1 #include <stdio.h>2 #include <string.h>3 #include <memory.h>4 #include <stdlib.h>5 6 void getMemory(char **p, int num)7 {8  printf("enter function getMemory\r\n");9  printf("p=%p,*p=%p\r\n", p, *p);10  *p = (char *)malloc(sizeof(char) * num);11  printf("p=%p,*p=%p\r\n", p, *p);12  printf("exit function getMemory\r\n");13 }14 15 int main()16 {17   char *str = NULL;18   printf("str=%p, &str=%p\r\n", str, &str);19   getMemory(&str, 100);20   strcpy(str, "hello");21   printf("str=%s\r\n", str);22   printf("str=%p\r\n", str);23   printf("&str=%p\r\n", &str);24   free(str);25 26 }
~                                                                                                                                                                                              ~                                                                                                                                                                                              
"test1.c" 26L, 542C            
root@mkx:~/learn/getMemory# gcc test1.c -o test1
root@mkx:~/learn/getMemory# ./test1 
str=(nil), &str=0x7ffeddf9e010
enter function getMemory
p=0x7ffeddf9e010,*p=(nil)
p=0x7ffeddf9e010,*p=0xf22420
exit function getMemory
str=hello
str=0xf22420
&str=0x7ffeddf9e010

 5、最后的总结

失败的例子的情况是这样的:

失败就是失败在,传给函数参数的变量p,与当前变量str的地址已经不一样了,它们只是存储的内容是一样的,这就决定了两边的操作,已经没有任何关系了,后来,又给没有分配内存的变量赋值,程序肯定崩溃了

成功的例子情况是这样的:

这里的成功之处,就在于用了指针的指针,一想,感觉有些糊涂的感觉,细想一下,其根本之处在于通过第二级指针,准确的定位到了一级指针,给一级指针赋值了分配内存的地址,就是这么简单。


http://chatgpt.dhexx.cn/article/U4jLSqE2.shtml

相关文章

十四、C指针详解(四):指针的指针

文章目录 一、指针的指针 一、指针的指针 指针用来存放变量的地址&#xff0c;同时&#xff0c;指针也有自己的地址&#xff0c;因此&#xff0c;就可以设置一个指针变量&#xff0c;用来存放指针的地址&#xff0c;也就是指针的指针&#xff0c;他存放的是一个地址&#xff0…

指针的指针、字符串和指针、数组指针(详)

一、指针的指针 指针的指针&#xff0c;即指针的地址 定义了一个指针变量&#xff0c;指针变量本身占4个字节&#xff0c;指针变量也有地址编号 例&#xff1a; int a0x12345678; 假设a的地址为&#xff1a;0x0000 2000 int *p; p&a; 则p中存放的是a的地址编号为0x0000 20…

指针的指针(简单易懂)

int a 12&#xff1b; int *b &a; 内存的分配如下 这时再来一个变量 c &b; 问题来了? c 是什么类型? b 是指向整型的指针 ,c 是指向整形指针的指针&#xff1f; 是的 c 是指向指针的指针 声明如下 int ** c; int a 12; int *b &a; int **c &b…

Nginx Rewrite规则详解

Nginx Rewrite 规则相关指令 相关指令有if,rewrite,set,return,break等&#xff0c;其中最关键的就是rewrite.一个简单的Nginx Rewrite规则语法如下&#xff1a;rewrite ^/b/(.*)\.html /play.php?video$1 break; 1.break指令 默认值&#xff1a;none ;使用环境&#xff1a…

nginx配置文件rewrite规则

nginx配置文件rewrite规则 文章目录 nginx配置文件rewrite规则[toc]ifRewite 规则介绍flag标志位配置rewrite规则last二次转发 if 语法&#xff1a;if (condition) {…} 应用场景&#xff1a; server段 location段 常见的condition 变量名&#xff08;变量值为空串&#xf…

nginx Rewrite 规则

一&#xff1a;nginx Rewrite 规则 1&#xff1a;rewrite的概念&#xff1a; Nginx Rewrite功能是使用nginx提供的全局变量或自己设置的变量&#xff0c;结合正则表达式和标志位实现URL重写以及重定向功能。Rewrite指令只能放在server {}&#xff0c;location {}&#xff0c;…

Nginx高级之Rewrite规则

进阶阶段的回顾: Nginx进阶之静态Web资源服务 Nginx进阶之代理服务 Nginx进阶之负载均衡服务 Nginx进阶之缓存服务和动静分离 作用及应用场景 作用: 实现对URL的重写以及对匹配(正则表达式)的url的重定向 场景: 1. URL访问跳转, 支持开发设计 ① 页面跳转 ② 兼容…

Nginx配置请求转发location及rewrite规则

location / {# 精确匹配 / &#xff0c;主机名后面不能带任何字符串[ configuration A ] }location / {# 因为所有的地址都以 / 开头&#xff0c;所以这条规则将匹配到所有请求# 但是正则和最长字符串会优先匹配[ configuration B ] }location /documents/ {# 匹配任何以 …

Rewrite规则简介

Rewirte主要的功能就是实现URL的跳转&#xff0c;它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块&#xff0c;必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块&…

rewrite详解

rewrite模块 URI跟URL介绍 什么是uri&#xff1f;统一标识符&#xff0c;拿www.abc.com/aw/wd/举例&#xff0c;那么rui就是/aw/wd/这部分数据(也有可能是图片&#xff0c;html网页,如果是伪静态的话,那就得看配置是啥玩意了 什么是url? 统一定位符&#xff…

Nginx基础——Rewrite规则

点击上方“芋道源码”&#xff0c;选择“置顶公众号” 技术文章第一时间送达&#xff01; 源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69 篇&#xff0c;预计总共 75 篇 )中文详细注释的开源项目Java 并发源码合集RocketMQ 源码合集Sharding-JDBC 源码解析合集Spring …

F280049C Crossbar X-BAR

文章目录 X-BAR9.1 输入X-BAR9.2 ePWM、CLB和GPIO输出X-BAR9.2.1 ePWM X-BAR9.2.1.1 ePWM X-BAR架构 9.2.2 CLB X-BAR9.2.2.1 CLB X-BAR架构 9.2.3 GPIO输出X-BAR9.2.3.1 GPIO输出X-BAR架构9.2.4 X-BAR标志 总结 X-BAR 交叉开关&#xff08;在本章中称为X-BAR&#xff09;提供…

BCGControlBar Pro 31.2 正式版-Key

什么是 MFC 的 BCGControlBar Pro&#xff1f; BCGControlBar&#xff08;“Business Components Gallery ControlBar”&#xff09;是一个 MFC 扩展库&#xff0c;企鹅180846090允许您创建具有完全自定义选项&#xff08;功能区、可自定义工具栏、菜单等&#xff09;和一组丰富…

BCGControlBar Library for .NET 7.1.1 Crack

什么是 BCGControlBar Library for .NET&#xff1f; BCGControlBar Library for .NET 是 100% 托管代码工具包&#xff0c;用 C/CLI 编写&#xff0c;面向 Microsoft .NET Framework 2.0 或更高版本。该库包含许多高度可定制、完全可设计的组件&#xff0c;使您能够创建最复杂…

BCGControlBar v12的向导使用图解

BCGControlBar专业版是MFC的一个扩展库&#xff0c;您可以用来构建类似于Microsoft Office 2000/XP/2003/2007/2010、Microsoft Visual Studio&#xff08;打印、用户定制工具栏、菜单等&#xff09;和其他一些知名产品的高级用户界面。 首先从网上下载BCGControlBar v12资源 &…

MFC界面控件BCGControlBar v33.4 - 日历、属性网格组件升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了&#xff0c;该版本包含了对Windows 11 Mica materi…

BCG学习(一)——BCGControlBar安装与配置

最近工作中需要用到BCG相关的知识&#xff0c;趁着全民防疫、居家隔离这段时间正好学习一下&#xff0c;作此笔记&#xff0c;记录学习过程和心得体会。话不多说&#xff0c;开整&#xff01; 简介 下载、安装与配置 例程编译与运行 简介 BCG是MFC的一个扩展库&#xff0c;可以…

MFC扩展库BCGControlBar Pro v33.5新版亮点 - 控件、脚本管理增强

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.5已正式发布了&#xff0c;此版本包含了Ribbon&#xff08;功能区&#xff09;自定义…

MFC界面控件BCGControlBar v33.4 - 支持Win 11 Mica material主题

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了&#xff0c;该版本包含了对Windows 11 Mica materi…

MFC界面控件BCGControlBar v33.4 - 各子控件全面升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了&#xff0c;该版本包含了对Windows 11 Mica materi…