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

Linux/C 高级——指针函数

1.概念

本质是函数,函数的返回值为指针。类比着指针数组。

指针数组:本质是数组,数组中存放指针。

数据类型 *数组名[元素个数];

int a[2][3];

int *arr[2] ={a[0],a[1]};

//*(*(arr+i)+j) *(arr[i]+j) arr[i][j]

2.定义格式

格式:

数据类型 *函数名(参数列表)

{

        函数体;

        return 地址; //当失败时一般返回NULL

}

3.函数内开辟空间

案例一

#include <stdio.h>char *fun()
{char buf[32] = "hello";return buf;
}int main(int argc, char const *argv[])
{char *p = fun();printf("%s\n", p);return 0;
}
结果未知,因为返回局部变量地址,函数调用结束后没有权限使用栈区的空间了所以结果是不可控的。如果被其他进程占用,可能会报段错误或者打印奇怪的东西。

修改:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char *fun()
{char *p = (char *)malloc(32);if (NULL == p){printf("malloc lost\n");return NULL;}// p="hello"; //让p又指向了常量区的hello而不指向堆区了strcpy(p, "hello");return p;
}int main(int argc, char const *argv[])
{char *p = fun();  if (NULL == p){printf("fun err\n"); //如果函数返回值为NULL可以打印一句错误提示return -1;   //如果错误让主函数结束,程序不再往后运行了}printf("%s\n", p);free(p);p = NULL;return 0;
}

案例二

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void fun(char *p)  //p=NULL
{p = (char *)malloc(32);if (NULL == p){printf("malloc lost\n");}strcpy(p, "hello");
}int main(int argc, char const *argv[])
{char *p = NULL;fun(p);printf("%s\n", p);  //函数调用结束后,主函数中的p还是指向了NULL,打印所以段错误free(p);p = NULL;return 0;
}

 报端错误:因为主函数中p指向了NULL,函数内改变形参p不会影响到主函数中的变量p, 所以函数调用完后主函数中的p还是指向了NULL。

修改:传递二级指针

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void fun(char **p) //p = &q;
{*p = (char *)malloc(32); //*p = *&q = qif (NULL == *p){printf("malloc lost\n");}strcpy(*p, "hello"); //*p = *&q = q
}int main(int argc, char const *argv[])
{char *q = NULL;fun(&q);                    //函数调用结束后,q指向了堆区空间printf("%s\n", q);free(q);q = NULL;return 0;
}

案例三:数组传递

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void fun(int arr[5])  //arr类型为int *, 本质还是传递指针
{arr[0] = 100;printf("%ld\n", sizeof(arr));
}int main(int argc, char const *argv[])
{int a[5] = {1, 2, 3, 4, 5};fun(a);printf("%d\n", a[0]);return 0;
}
传递数组的形式是为了让用户知道要传递的是一个数组,但本质还是传递数组的首地址,也就是传递指针。

相关文章:

Linux/C 高级——指针函数

1.概念 本质是函数&#xff0c;函数的返回值为指针。类比着指针数组。 指针数组&#xff1a;本质是数组&#xff0c;数组中存放指针。 数据类型 *数组名[元素个数]; int a[2][3]; int *arr[2] {a[0],a[1]}; //*(*(arri)j) *(arr[i]j) arr[i][j] 2.定义格式 格式&#xff1a; 数…...

GRU门控循环单元【数学+图解】

文章目录 1、简介2、门控机制3、公式4、图解GRU4.1、重置门和更新门4.2、候选隐藏状态和隐藏状态⭐ 5、LSTM与GRU的对比6、应用7、训练技巧 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff…...

代码随想录算法训练营第六十一天|Bellman_ford 队列优化算法(又名SPFA)、bellman_ford之判断负权回路

卡码网&#xff1a;94. 城市间货物运输 I from collections import dequeclass Edge:def __init__(self, to, val):self.to to # 链接的节点self.val val # 边的权重def main():n, m map(int, input().split())grid [list() for _ in range(n 1)] # 初始化邻接表for _…...

ArrayList集合源码解读(二)已完结

ArrayList集合源码解读&#xff08;二&#xff09; 前言 这篇文章已经把 ArrayList 更完了。各位还想看什么源码可以私信我~~ 上节课带大家阅读了 ArrayList 中的核心扩容代码&#xff0c;那么今天带大家阅读下List集合中我们常用的几个方法的底层实现逻辑&#xff01; 常用…...

光伏逆变器、MPPT、PCS储能变流器、BMU、BCU、BDU和液冷机组

一、光伏逆变器 光伏逆变器&#xff08;PV inverter或solar inverter&#xff09;可以将光伏&#xff08;PV&#xff09;太阳能板产生的可变直流电压转换为市电频率交流电&#xff08;AC&#xff09;的逆变器&#xff0c;可以反馈回商用输电系统&#xff0c;或是供离网的电网使…...

OpenHarmony编译

简介&#xff1a;本文将会介绍编译OpendHarmony环境的搭建、编译、和刷机&#xff08;rk3568&#xff09; 使用场景&#xff1a;修改系统源码&#xff0c;需要验证修改的功能是否正确、编译镜像、编译SDK 1、VS Code&#xff0c;下载链接&#xff0c;用于修改源码 2、linux环…...

C语言典型例题30

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.7 从银行贷了一笔款d&#xff0c;准备每月还款额为p&#xff0c;月利率为r&#xff0c;计算多少个月能还清。 设d30000元&#xff0c;p6000元&#xff0c;r1%。对求得的月份取小数点后一位&#xff0c;对第二…...

springMVC @RestControllerAdvice注解使用方式

使用 RestControllerAdvice 的主要场景包括&#xff1a; 全局异常处理&#xff1a;处理所有控制器中抛出的未捕获异常。数据校验失败处理&#xff1a;处理 Bean Validation 校验失败的情况。自定义响应&#xff1a;统一定义响应格式或错误信息。 RestControllerAdvice 注解的…...

HarmonyOS鸿蒙开发岗位面试中关于组件的问题总结

文章目录 1. 鸿蒙组件的基本概念2. 组件的使用3. 布局管理4. 组件间通信5. 组件化开发6. 性能优化7. 实战应用 鸿蒙应用开发岗位面试中关于鸿蒙组件的问题&#xff0c;通常会涉及多个关键知识点&#xff0c;这些知识点涵盖了鸿蒙组件的基本概念、使用、布局管理、性能优化、组件…...

Unity 在Editor下保存对Text组件的文本的修改

Unity 在Editor下保存对Text组件的文本的修改 /****************************************************文件&#xff1a;TimeStampForText.cs作者&#xff1a;lenovo邮箱: 日期&#xff1a;2024/8/8 1:9:21功能&#xff1a; *************************************************…...

mysql 日志爆满,删除日志文件,定时清理日志

今天发现网站不能正常访问&#xff0c;于是登陆服务器查找问题。 机智的我随手用命令&#xff1a;df -l 发现 硬盘爆满了&#xff0c;于是就知道问题所在了。 Filesystem 1K-blocks Used Available Use% Mounted on/dev/xvda1 20641404 16963004 16929876 10…...

MySQL学习(19):锁

1.什么是锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中&#xff0c;数据是供许多用户共享的资源&#xff0c;数据库必须保证数据并发访问的一致性、有效性&#xff0c;这就要靠锁来协调实现。 MySOL中的锁&#xff0c;分为以下三类&#xff1a; &am…...

【出海日记】关于 KD ,数据工具的陷阱

一个关键词&#xff1a;deepwoken builder 对标的竞品&#xff1a;deepwoken.co 初步分析&#xff1a; https://ahrefs.com/keyword-difficulty/?countryus 显示这个关键词优化难度极低 拿流量的是一个内页&#xff0c;单靠这个内页一个月有 22 万的流量 看起来很香&#x…...

【k8s集群部署篇】在openEuler环境下部署多master高可用kubernetes集群详细教程(V1.30版本)

【k8s集群部署篇】在openEuler环境下部署多master高可用kubernetes集群详细教程(V1.30版本) 一、相关名词介绍1.1 k8s简介1.2 Keepalived简介1.3 HAProxy简介二、本次实践介绍2.1 环境规划介绍2.2 本次实践简介三、所有节点基础环境配置3.1 主机配置工作3.2 关闭防火墙和seli…...

数据结构:链表经典算法OJ题

目录 前言 一、移除链表元素 二、反转链表 三、合并两个有序链表 四、链表的中间节点 五、环形链表的约瑟夫问题 前言 在了解了链表的相关知识后&#xff0c;我们还需要一些题目进行练习加深对链表这方面知识的理解&#xff0c;也可以用来检测链表这块学的的怎么样&#…...

【线性代数】【二】2.2 极大线性无关组与向量空间的基

文章目录 前言一、极大线性无关组二、向量空间的基三、向量维数与向量空间维数总结 前言 上一篇中我们介绍了向量空间的概念&#xff0c;并且学习了对任意给出的一组向量&#xff0c;如果构造一个向量空间。本文将更加细致的去分析张成一个向量空间&#xff0c;具有哪些性质。…...

OD C卷 - CPU算力分配

CPU算力分配 两组服务器A、B, 每组有多个算力不同的CPU&#xff1b;为了让两组服务器的算力和相等&#xff0c;允许两组各选出一个CPU进行一次交换&#xff1b;求两组中用于交换的CPU算力&#xff0c;从A中选出的算力尽可能小&#xff1b; 输入描述&#xff1a; 第一行 输入L…...

matlab实现红绿灯识别

在MATLAB中实现红绿灯识别通常涉及图像处理技术&#xff0c;包括颜色分割、形态学操作、边缘检测等步骤。下面我将给出一个基本的框架和示例代码&#xff0c;用于在MATLAB中识别图像中的红绿灯。 步骤 1: 读取图像 首先&#xff0c;你需要有一张包含红绿灯的图像。 img imr…...

base64 转 pdf

工作中经常会遇到一些签名的pdf传输&#xff0c;一般都是base64编码&#xff0c;这样就需要我们手动转为pdf&#xff0c; 其实根本不需要自己使用pdf的库写入&#xff0c;只是数据的简单写入就行 package mainimport ("encoding/base64""fmt""os&quo…...

vue2项目微信小程序的tabs切换效果

在 Vue 2 项目中实现类似微信小程序的 tabs 切换效果&#xff0c;可以通过 Vue 的 router-view 和 <router-link> 来完成。这里我们使用 Vue Router 来创建一个标签页切换的效果。 步骤 1: 安装 Vue Router 如果还没有安装 Vue Router&#xff0c;首先需要安装它&#…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...