C 语言学习-06【指针】
1、目标单元与简介存取
直接访问和间接访问
#include <stdio.h>int main(void) {int a = 3, *p;p = &a;printf("a = %d, *p = %d\n", a, *p);*p = 10;printf("a = %d, *p = %d\n", a, *p);printf("Enter a: ");scanf("%d", &a);printf("a = %d, *p = %d\n", a, *p);(*p)++;printf("a = %d, *p = %d\n", a, *p);return 0; }
- 运行结果:
2、引用指针变量
引用指针变量
#include <stdio.h>int main() {int a = 15;int *p = &a;printf("%d, %d\n", a, *p);return 0; }
- 运行结果:
通过指针修改内存上的数据
#include <stdio.h>int main() {int a = 15, b = 99, c = 222;int *p = &a;*p = b;c = *p;printf("%d, %d, %d, %d\n", a, b, c, *p);return 0; }
- 运行结果:
3、指针变量作为函数参数
通过指针交换两个变量的值:
#include <stdio.h>void swap(int *p1, int *p2) {int temp;temp = *p1;*p1 = *p2;*p2 = temp; }int main() {int a = 66, b = 99;swap(&a, &b);printf("a = %d, b = %d\n", a, b);return 0; }
- 运行结果:
4、指向数组的指针
通过指针输出数组中元素的值
#include <stdio.h>int main(void) {int i, a[] = {1, 3, 5, 7, 9};int *p = a;for (i = 0; i < 5; i++) {printf("%d\t", *(p+i));}printf("\n");return 0; }
- 运行结果:
5、指向数组的指针作为函数参数
利用数组名作为参数,将数组中的 10 个整数完全颠倒顺序:
#include <stdio.h>void inv(int *x, int n);int main() {int i, a[] = {3, 7, 9, 11, 0, 6, 7, 5, 4, 2};printf("The original array: \n");for (i = 0; i < 10; i++) {printf("%3d", a[i]);}printf("\n");inv(a, 10);printf("The array has been inverted: \n");for (i = 0; i < 10; i++) {printf("%3d", a[i]);}printf("\n");return 0; }void inv(int *x, int n) {int t, *i, *j;for (i = x, j = x + n - 1; i <= j; i++, j--) {t = *i;*i = *j;*j = t;}return; }
- 运行结果:
6、字符串指针
八进制转换成十进制:
#include <stdio.h>int main(void) {char *p, s[6];int n;n = 0;p = s;printf("Enter the octal number you want to convert: \n");gets(p);while (*(p) != '\0') {n = n * 8 + *p - '0';p++;}printf("The converted decimal number is: \n%d\n", n);return 0; }
- 运行结果:
7、指针复制字符串
字符串复制:
#include <stdio.h>int main(void) {char str1[10], str2[10];char *p1, *p2;p1 = str1;p2 = str2;printf("Please enter the original string: \n");gets(p2);for (; *p2 != '\0'; p1++, p2++) {*p1 = *p2;}*p1 = '\0';printf("The original string is %s\n, and the copied string is %s\n", str2, str1);return 0; }
- 运行结果:
字符串连接:
#include <stdio.h>int main(void) {char str1[10], str2[10], str[10];char *p1, *p2, *p;int i = 0;p1 = str1;p2 = str2;p = str;printf("Please enter the str1: \n");gets(p1);printf("Please enter the str2: \n");gets(p2);while (*p1 != '\0') {*p = *p1;p += 1;p1 += 1;i++;}for (; *p2 != '\0'; p1++, p2++, p++) {*p = *p2;}*p = '\0';printf("str1 is %s\nstr2 is %s\nAfter connection is: %s\n", str1, str2, str);return 0; }
- 运行结果:
已知一个字符串,使用返回指针的函数,实现把该字符串中的 ‘*’ 号删除,同时把后面连接的字符串前移
#include <stdio.h> #include <string.h>char *strarrange(char *arr) {char *p = arr;char *t;while (*p != '\0') {p++;if (*p == '*') {t = p;while (*t != '\0') {*t = *(t + 1);t++;}p--;}}return arr; }int main(void) {char s[] = "abc*def***ghi*jklmn";char *p;p = s;printf("Before deletion, the character string is: %s\n", p);printf("After deletion, the character string is: %s\n", strarrange(p));return 0; }
- 运行结果:
8、函数指针
指向函数的指针:
#include <stdio.h>int max(int x, int y) {int z;if (x > y) {z = x;} else {z = y;}return z; }int main(void) {int(*p)(int, int);int a, b, c;p = max;printf("Enter the values of a and b\n");scanf("%d %d", &a, &b);c = (*p)(a, b);printf("The larger value of %d and %d is: %d\n", a, b, c);return 0; }
- 运行结果:
9、使用 const 修饰指针变量
const 类型 *变量名:可以改变指针的指向,不能改变指针指向的内容类型 * const 变量名:可以改变指针指向的内容,不能改变指针的指向const 类型 * const 变量名:指针的指向、指针指向的内容都不可以改变
10、数值排序
实现将 3 个数值进行降序排列:
#include <stdio.h> #include <stdlib.h>void fun(int *a, int *b) {int temp;temp = *a;*a = *b;*b = temp; }void exchange(int *a, int *b, int *c) {if (*a < *b) fun(a, b);if (*a < *c) fun(a, c);if (*b < *c) fun(b, c); }void main() {int *p1 = (int*)malloc(sizeof(int));int *p2 = (int*)malloc(sizeof(int));int *p3 = (int*)malloc(sizeof(int));printf("Please input 3 numbers: \n");scanf("%d %d %d", p1, p2, p3);exchange(p1, p2, p3);printf("Output: \n");printf("*p1 = %d\t*p2 = %d\t*p3 = %d\n", *p1, *p2, *p3);free(p1);free(p2);free(p3); }
- 运行结果:
相关文章:
C 语言学习-06【指针】
1、目标单元与简介存取 直接访问和间接访问 #include <stdio.h>int main(void) {int a 3, *p;p &a;printf("a %d, *p %d\n", a, *p);*p 10;printf("a %d, *p %d\n", a, *p);printf("Enter a: ");scanf("%d", &a)…...
如何快速将Excel数据导入到SQL Server数据库
工作中,我们经常需要将Excel数据导入到数据库,但是对于数据库小白来说,这可能并非易事;对于数据库专家来说,这又可能非常繁琐。 这篇文章将介绍如何帮助您快速的将Excel数据导入到sql server数据库。 准备工作 这里&…...
【人工智能】Python在机器学习与人工智能中的应用
Python因其简洁易用、丰富的库支持以及强大的社区,被广泛应用于机器学习与人工智能(AI)领域。本教程通过实用的代码示例和讲解,带你从零开始掌握Python在机器学习与人工智能中的基本用法。 1. 机器学习与AI的Python生态系统 Pyth…...
使用八爪鱼爬虫抓取汽车网站数据,分析舆情数据
我是做汽车行业的,可以用八爪鱼爬虫抓取汽车之家和微博上的汽车文章内容,分析各种电动汽车口碑数据。 之前,我写过很多Python网络爬虫的案例,使用requests、selenium等技术采集数据,这次尝试去采集小米SU7在微博、汽车…...
什么是事务?事务有哪些特性?
在数据库管理中,事务是一个核心概念,它确保了数据操作的完整性和一致性。本文将探讨事务的定义及其四大特性。 一、事务的定义 事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作。这些操作作为一个整体一起向系统提…...
玩转合宙Luat教程 基础篇④——程序基础(库、线程、定时器和订阅/发布)
文章目录 一、前言二、库三、线程四、定时器五、订阅/发布5.1 回调函数5.2 堵塞等待一、前言 教程目录大纲请查阅:玩转合宙Luat教程——导读 写一写Lua程序基础的东西。 包括如何调用库,如何创建线程、如何创建定时器,如何使用订阅/发布事件。 二、库 程序从main.lua开始通…...
24.<Spring博客系统①(数据库+公共代码+持久层+显示博客列表+博客详情)>
项目整体预览 登录页面 主页 查看全文 编辑 写博客 PS:Service.impl(现在流行写法) 推荐写法。后续完成项目。会尝试这样写。 接口可以有多个实现。每个实现都可以不同。 这也算一种设计模式。叫做(策略模式)。 我们…...
webp 网页如何录屏?
工作中正好研究到了一点:记录下这里: 先看下效果: 具体实现代码:  <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
丹摩征文活动|实现Llama3.1大模型的本地部署
文章目录 1.前言2.丹摩的配置3.Llama3.1的本地配置4. 最终界面 丹摩 1.前言 Llama3.1是Meta 公司发布的最新开源大型语言模型,相较于之前的版本,它在规模和功能上实现了显著提升,尤其是最大的 4050亿参数版本,成为开源社区中非常…...
Spring Boot 2 和 Spring Boot 3 中使用 Spring Security 的区别
文章目录 Spring Boot 2 和 Spring Boot 3 中使用 Spring Security 的区别1. Jakarta EE 迁移2. Spring Security 配置方式的变化3. PasswordEncoder 加密方式的变化4. permitAll() 和 authenticated() 的变化5. 更强的默认安全设置6. Java 17 支持与语法提升7. PreAuthorize、…...
【数据结构与算法】 LeetCode:回溯
文章目录 回溯算法组合组合总和(Hot 100)组合总和 II电话号码的字母组合(Hot 100)括号生成(Hot 100)分割回文串(Hot 100)复原IP地址子集(Hot 100)全排列&…...
SpringBoot线程池的使用
SpringBoot线程池的使用 在现代Web应用开发中,特别是在使用Spring Boot框架时,合理使用线程池可以显著提高应用的性能和响应速度。线程池不仅能够减少线程创建和销毁的开销,还能有效地控制并发任务的数量,避免因线程过多而导致的…...
Neural Magic 发布 LLM Compressor:提升大模型推理效率的新工具
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
HttpServletRequest req和前端的关系,req.getParameter详细解释,req.getParameter和前端的关系
HttpServletRequest 对象在后端和前端之间起到了桥梁的作用,它包含了来自客户端的所有请求信息。通过 HttpServletRequest 对象,后端可以获取前端发送的请求参数、请求头、请求方法等信息,并根据这些信息进行相应的处理。以下是对 HttpServle…...
React-useEffect的使用
useEffect react提供的一个常用hook,用于在函数组件中执行副作用操作,比如数据获取、订阅或手动更改DOM。 基本用法: 接受2个参数: 一个包含命令式代码的函数(副作用函数)。一个依赖项数组,用…...
MySQL数据库与Informix:能否创建同名表?
MySQL数据库与Informix:能否创建同名表? 一、MySQL数据库中的同名表创建1. 使用CREATE TABLE ... SELECT语句2. 使用CREATE TABLE LIKE语句3. 复制表结构并选择性复制数据4. 使用同义词(Synonym)二、Informix数据库中的同名表创建1. 使用不同所有者2. 使用不同模式3. 复制表…...
爬虫实战:采集知乎XXX话题数据
目录 反爬虫的本意和其带来的挑战目标实战开发准备代码开发发现问题1. 发现问题[01]2. 发现问题[02] 解决问题1. 解决问题[01]2. 解决问题[02] 最终结果 结语 反爬虫的本意和其带来的挑战 在这个数字化时代社交媒体已经成为人们表达观点的重要渠道,对企业来说&…...
大数据新视界 -- Hive 数据桶原理:均匀分布数据的智慧(上)(9/ 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
【小白学机器学习33】 大数定律python的 pandas.Dataframe 和 pandas.Series基础内容
目录 0 总结 0.1pd.Dataframe有一个比较麻烦琐碎的地方,就是引号 和括号 0.2 pd.Dataframe关于括号的原则 0.3 分清楚几个数据类型和对应的方法的范围 0.4 几个数据结构的构造关系 list → np.array(list) → pd.Series(np.array)/pd.Dataframe 1 python 里…...
【shodan】(五)网段利用
shodan基础(五) 声明:该笔记为up主 泷羽的课程笔记,本节链接指路。 警告:本教程仅作学习用途,若有用于非法行为的,概不负责。 nsa ip address range www.nsa.gov需科学上网 搜索网段 shodan s…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...











