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

指向指针的指针+ 值传递的理解

//17、下面的程序会出现什么结果 
#include  
#include  
void getmemory(char *p) 
{ 
p=(char *) malloc(100); 
strcpy(p,”hello world”); 
} int main( ) 
{ 
char *str=NULL; 
getmemory(str); 
printf(%s/n”,str); 
free(str); 
return 0; 
} 
// 程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险 

你上面提供的程序会导致运行时错误,具体原因如下:

1. 函数 getmemory 中的内存分配

getmemory 函数中,你尝试通过 malloc 分配内存并将其赋值给 p

void getmemory(char *p) 
{ p = (char *) malloc(100); strcpy(p, "hello world"); 
}
  • 这里的 p 是一个局部变量,传递给它的指针 strmain 函数中是 NULL
  • 当你调用 malloc 时,确实分配了 100 字节的内存,但这只改变了 p 的值,原始的 str 指针在 main 函数中仍然是 NULL。函数结束后,p 被销毁,分配的内存的指针没有被保存。

2. main 函数中的操作

main 函数中,str 仍然是 NULL

int main() 
{ char *str = NULL; getmemory(str); printf("%s/n", str); // 这里 str 仍然是 NULLfree(str); // 释放 NULL 的内存,虽然是安全的,但没有释放有效的内存return 0; 
}
  • 当你调用 printf("%s", str); 时,str 仍然是 NULL,这将导致未定义行为,程序可能会崩溃。
  • 之后的 free(str); 调用虽然是安全的(释放 NULL 指针是安全的),但它不会释放任何有效的内存,因为 str 仍然是 NULL

3. 如何修复

如果你想让 getmemory 函数修改 str,你需要将 str 的地址传递给 getmemory。可以使用指向指针的指针:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void getmemory(char **p) 
{ *p = (char *) malloc(100); strcpy(*p, "hello world"); 
}int main() 
{ char *str = NULL; getmemory(&str); // 传递 str 的地址printf("%s\n", str); free(str); return 0; 
}

总结

  • 原始程序会导致崩溃,因为内存分配的结果没有返回给 main 中的 str
  • 通过传递指向指针的指针,可以使内存分配的结果有效地传回并使用。

指针和引用
python传参的值传递

让我们通过一个简单的例子来说明值传递和引用传递(或指针传递)之间的区别。

1. 值传递的例子

在 C 语言中,默认的参数传递方式是值传递。当你将一个变量传递给函数时,实际上是将该变量的副本传递过去,函数内对该副本的修改不会影响原始变量。

#include <stdio.h>void modifyValue(int a) {a = 10; // 这里只改变了 a 的副本
}int main() {int a = 3;printf("Before: a = %d\n", a); // 输出: 3modifyValue(a); // 传递 a 的值printf("After: a = %d\n", a);  // 输出: 3 (未改变)return 0;
}
输出:
Before: a = 3
After: a = 3

2. 指针传递的例子

如果你想要在函数中修改原始变量的值,你需要传递该变量的地址。这时,你可以使用指针来实现。

#include <stdio.h>void modifyValue(int *p) {*p = 10; // 通过指针修改原始变量的值
}int main() {int a = 3;printf("Before: a = %d\n", a); // 输出: 3modifyValue(&a); // 传递 a 的地址printf("After: a = %d\n", a);  // 输出: 10 (已改变)return 0;
}
输出:
Before: a = 3
After: a = 10

总结

  • 值传递:在 modifyValue(int a) 中,amain 函数中 a 的副本。对 a 的修改不会影响原始变量。

  • 指针传递:在 modifyValue(int *p) 中,pa 的地址,*p 允许你通过指针修改原始变量 a 的值。

通过这种方式,你可以看到传递变量的值和地址(指针)所产生的不同效果。

相关文章:

指向指针的指针+ 值传递的理解

//17、下面的程序会出现什么结果 #include #include void getmemory(char *p) { p(char *) malloc(100); strcpy(p,”hello world”); } int main( ) { char *strNULL; getmemory(str); printf(“%s/n”,str); free(str); return 0; } // 程序崩溃&#xff0c…...

CSS常用定位

一、relative 相对原先的位置进行定位 {position: relative;left: 50px; /* 相对原先位置左边的距离 */top: 100px; /* 相对原先位置上边的距离 */ } 二、absolute 绝对定位&#xff0c;是相对于最近有定位的父级元素进行定位 {position: absolute;righ…...

【Linux】从零开始使用多路转接IO --- select

碌碌无为&#xff0c;则余生太长&#xff1b; 欲有所为&#xff0c;则人生苦短。 --- 中岛敦 《山月记》--- 从零开始认识五种IO模型 1 前言2 认识多路转接select3 多路转接select等待连接4 完善代码5 总结 1 前言 上一篇文章我们讲解了五种IO模型的基本概念&#xff0c;并…...

ArcGIS Pro SDK (二十一)渲染

ArcGIS Pro SDK (二十一)渲染 文章目录 ArcGIS Pro SDK (二十一)渲染1 定义唯一值呈现器定义2 为最新观测值设置唯一值渲染器3 为先前的观测值设置唯一值渲染器4 设置简单的渲染器以绘制轨迹线5 检查先前的观测值和轨道线可见性6 使轨迹线和先前的观测点可见7 检索当前观测…...

FPGA在物联网边缘计算中的应用!!!

FPGA&#xff08;现场可编程门阵列&#xff09;在物联网边缘计算中的应用正变得越来越重要。边缘计算是一种分布式计算架构&#xff0c;它将数据的处理分散到网络的边缘&#xff0c;靠近数据源&#xff0c;而不是集中在数据中心处理。以下是FPGA在物联网边缘计算中的几个关键应…...

【解决】Linux环境中mysqlclient安装失败问题

问题描述 在Linux系统下安装myslclient报异常。系统为Centos 8 使用 pip install mysqlclient 报出下面的异常 error: subprocess-exited-with-error Getting requirements to build wheel did not run successfully.│ exit code: 1╰─> [30 lines of output]/bin/sh: pkg…...

✨ Midjourney中文版:创意启航,绘梦无界 ✨

Midjourney AI超强绘画 (原生态系统&#xff09;用户端&#xff1a;Ai Loadinghttps://www.mjdiscord.com 项目详细介绍飞书文档&#xff1a;Docshttps://ivqklkndl4k.feishu.cn/docx/GRnMdCbcooWkwTx1RU4cZjGVnzb?fromfrom_copylk &#x1f310; 无缝体验&#xff0c;中文定制…...

软件(1)

软件 常考软件 图像软件 Flash 一款二维动画处理软件 photoshop 图像处理界的“巨无霸” ACDSee ACDSee是常用的图片管理编辑软件&#xff0c;尽管也可以支持WAV格式的音频播放&#xff0c; 但目前主要是作为看图软件 音频软件 Winamp Winamp是数字媒体播放的先驱Audition Audi…...

linux perf 环境部署和基本测试(基于Ubuntu20.04)

1,linux 安装perf sudo apt-ge install linux-tools-common sudo apt-get install linux-tools-$(uname -r) linux-tools-generic -y 2 补充安装 sudo apt-get install python3-q-text-as-data 3&#xff0c;perf常用命令 larkubuntu:~$ perf usage: perf [--version] [--hel…...

【网络面试篇】HTTP(1)(笔记)——状态码、字段、GET、POST、缓存

目录 一、相关问题 1. HTTP请求常见的状态码和字段&#xff1f; &#xff08;1&#xff09;状态码 &#xff08;2&#xff09;字段 ① Host 字段 ② Content-length 字段 ③ Connection 字段 ④ Content-Type 字段 ⑤ Content-Encoding 字段 2. GET 和 POST 的区别&a…...

HTML 基础标签——分组标签 <div>、<span> 和基础语义容器

文章目录 1. `<div>` 标签特点用途示例2. `<span>` 标签特点用途示例3. `<fieldset>` 标签特点用途示例4. `<section>` 标签特点用途示例5. `<article>` 标签特点用途示例总结HTML中的分组(容器)标签用于结构化内容,将页面元素组织成逻辑区域…...

SS928V100 ISP常见问题列表

下载链接&#xff1a; https://download.csdn.net/download/quantum7/89948226 1 FAQ 1 1.1 ISP 1 1.1.1 如何解决整体锐度不足 1 1.1.2 如何解决图像发蒙问题&#xff0c;提高通透性 2 1.1.3 如何解决低照度清晰度差 2 1.1.4 如何解决图像清晰度与物体边缘白边和黑边问题…...

AI写诗:自动版大唐宫体诗

大唐学子&#xff0c;手拿一本小卷&#xff08;类书&#xff09;&#xff0c;从中挑选过去他们&#xff08;权威&#xff09;认为好的词来拼接一首诗&#xff0c;此类诗词称作“宫体诗”&#xff0c;在初唐时期甚是流行。 写“宫体诗”的过程有木有那么一丝丝的熟悉&#xff1f…...

Java复习31(PTA)

sdust-Java-字符串集合求并集 分数 15 全屏浏览 切换布局 作者 张峰 单位 山东科技大学 从键盘接收N个英文字符串&#xff08;其中不同的字符串数量大于10&#xff09;&#xff0c;从头开始取5个不同的字符串放入一个集合S1&#xff0c;然后接着取5个不同的字符串放入另一个…...

【Linux系列】Linux 系统中的软连接管理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

@layer(级联层)

在css样式表(文件)中声明layer为样式添加级联层,其意义在于可以使用它重新定义样式的叠层关系. layer后声明的级联层里面的样式将覆盖前声明的级联层里面的相同属性.在级联层外声明的样式会覆盖级联层里面的相同属性样式,同一层级里面的样式冲突,依然按照优先级来计算. 在级联层…...

nginx代理websocket服务

一、nginx代理websocket服务 一&#xff09;nginx代理ws服务 在nginx中&#xff0c;可以通过proxy_pass指令来代理WebSocket服务。 以下是一个示例配置&#xff1a; map $http_upgrade $connection_upgrade {default upgrade; close; }upstream ws_backend {server 127.0.0.1:…...

第二十七章 Vue异步更新之$nextTick

目录 一、概述 二、完整代码 2.1. main.js 2.2. App.vue 一、概述 需求&#xff1a;编辑标题, 弹出显示编辑框自动聚焦 1. 点击编辑&#xff0c;显示编辑框 2. 让编辑框&#xff0c;立刻获取焦点 我们常规的思路可能会编写如下代码来实现&#xff1a; 问题&#xff1a…...

【51 Pandas+Pyecharts | 深圳市共享单车数据分析可视化】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 处理起始时间、结束时间2.4 增加骑行时长区间列2.5 增加骑行里程区间列 &#x1f3f3;️‍&#x1f308; 3. Pyecharts数据可视化3.1 各…...

【Clikhouse 探秘】ClickHouse 物化视图:加速大数据分析的新利器

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…...

古基因组学:降解DNA的损伤模式、污染评估与群体历史推断

点击 “AladdinEdu&#xff0c;你的AI学习实践工作坊”&#xff0c;注册即送-H卡级别算力&#xff0c;沉浸式云原生集成开发环境&#xff0c;80G大显存多卡并行&#xff0c;按量弹性计费&#xff0c;教育用户更享超低价。 摘要&#xff1a;古基因组学通过对古代生物遗骸中高度降…...

从NDVI到地表温度:用ENVI Band Math一次性搞定植被与热环境分析

ENVI波段运算实战&#xff1a;NDVI与地表温度的高效批量处理技巧 遥感影像分析中&#xff0c;植被指数和地表温度是最基础却又最关键的指标。传统操作流程往往需要反复切换不同工具模块&#xff0c;既耗时又容易出错。而ENVI的Band Math功能就像一把瑞士军刀&#xff0c;能将这…...

终极指南:如何用buger/jsonparser实现10倍性能的Go JSON解析

终极指南&#xff1a;如何用buger/jsonparser实现10倍性能的Go JSON解析 【免费下载链接】jsonparser One of the fastest alternative JSON parser for Go that does not require schema 项目地址: https://gitcode.com/gh_mirrors/js/jsonparser buger/jsonparser是Go…...

手把手教你用Cline插件5分钟搞定DeepSeek-R1模型接入(附硅基流动平台2000万Token福利)

5分钟极速上手&#xff1a;用Cline插件无缝对接DeepSeek-R1大模型实战指南 当你第一次听说只需要5分钟就能让一个强大的AI模型为你工作时&#xff0c;可能会觉得这像是某种夸张的营销话术。但作为一个曾经花了整整三天时间才搞定第一个模型接入的开发者&#xff0c;我可以负责任…...

数据中台是什么?怎么搭建数据中台?

去年&#xff0c;一家零售企业的CEO找到我&#xff0c;说了一句让我印象很深的话&#xff1a; "我们公司有数据&#xff0c;但没有数据能力。"很多企业建数据中台&#xff0c;是为了管好数据。 但这个出发点&#xff0c;从一开始就错了。 数据中台的核心不是管理&…...

Excel VBA图像处理:如何在单元格中显示并调整图片大小

在Excel中处理图片时,VBA(Visual Basic for Applications)是一个强大的工具。今天我们将讨论如何通过VBA代码在Excel的单元格中插入并调整图片大小,以及如何解决一些常见的问题。 背景介绍 假设你有一个Excel工作表,A列从A2开始存放了几个图片文件名,如"test.jpg&…...

当仿真与FPGA打架时,你该信谁?

该文章同步至公众号OneChan 一、一个真实的故事&#xff1a;比特翻转的“罗生门” 去年&#xff0c;我们在做一款通信芯片的嵌入式固件开发。在仿真环境中&#xff0c;我们精心编写的DMA驱动完美无缺&#xff0c;数据传输的CRC校验次次通过。我们信心满满地把比特流下载到FPG…...

Phi-3-mini-4k-instruct-gguf实操手册:短问答/改写/摘要三大高频场景落地

Phi-3-mini-4k-instruct-gguf实操手册&#xff1a;短问答/改写/摘要三大高频场景落地 1. 模型简介与核心能力 Phi-3-mini-4k-instruct-gguf是微软推出的轻量级文本生成模型&#xff0c;基于Phi-3系列优化而来。这个GGUF版本特别适合处理短文本任务&#xff0c;具有以下特点&a…...

ncmdumpGUI:网易云音乐加密文件转换的完整解决方案

ncmdumpGUI&#xff1a;网易云音乐加密文件转换的完整解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 一、初识ncmdumpGUI&#xff1a;解密音乐文件的…...

OpenRGB:开源跨平台RGB灯光控制方案,告别多软件困扰实现设备统一管理

OpenRGB&#xff1a;开源跨平台RGB灯光控制方案&#xff0c;告别多软件困扰实现设备统一管理 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcPr…...