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

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数据库

工作中&#xff0c;我们经常需要将Excel数据导入到数据库&#xff0c;但是对于数据库小白来说&#xff0c;这可能并非易事&#xff1b;对于数据库专家来说&#xff0c;这又可能非常繁琐。 这篇文章将介绍如何帮助您快速的将Excel数据导入到sql server数据库。 准备工作 这里&…...

【人工智能】Python在机器学习与人工智能中的应用

Python因其简洁易用、丰富的库支持以及强大的社区&#xff0c;被广泛应用于机器学习与人工智能&#xff08;AI&#xff09;领域。本教程通过实用的代码示例和讲解&#xff0c;带你从零开始掌握Python在机器学习与人工智能中的基本用法。 1. 机器学习与AI的Python生态系统 Pyth…...

使用八爪鱼爬虫抓取汽车网站数据,分析舆情数据

我是做汽车行业的&#xff0c;可以用八爪鱼爬虫抓取汽车之家和微博上的汽车文章内容&#xff0c;分析各种电动汽车口碑数据。 之前&#xff0c;我写过很多Python网络爬虫的案例&#xff0c;使用requests、selenium等技术采集数据&#xff0c;这次尝试去采集小米SU7在微博、汽车…...

什么是事务?事务有哪些特性?

在数据库管理中&#xff0c;事务是一个核心概念&#xff0c;它确保了数据操作的完整性和一致性。本文将探讨事务的定义及其四大特性。 一、事务的定义 事务是数据库操作的最小工作单元&#xff0c;是作为单个逻辑工作单元执行的一系列操作。这些操作作为一个整体一起向系统提…...

玩转合宙Luat教程 基础篇④——程序基础(库、线程、定时器和订阅/发布)

文章目录 一、前言二、库三、线程四、定时器五、订阅/发布5.1 回调函数5.2 堵塞等待一、前言 教程目录大纲请查阅:玩转合宙Luat教程——导读 写一写Lua程序基础的东西。 包括如何调用库,如何创建线程、如何创建定时器,如何使用订阅/发布事件。 二、库 程序从main.lua开始通…...

24.<Spring博客系统①(数据库+公共代码+持久层+显示博客列表+博客详情)>

项目整体预览 登录页面 主页 查看全文 编辑 写博客 PS&#xff1a;Service.impl&#xff08;现在流行写法&#xff09; 推荐写法。后续完成项目。会尝试这样写。 接口可以有多个实现。每个实现都可以不同。 这也算一种设计模式。叫做&#xff08;策略模式&#xff09;。 我们…...

webp 网页如何录屏?

工作中正好研究到了一点&#xff1a;记录下这里&#xff1a; 先看下效果&#xff1a; 具体实现代码&#xff1a; &#xfeff; <!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 公司发布的最新开源大型语言模型&#xff0c;相较于之前的版本&#xff0c;它在规模和功能上实现了显著提升&#xff0c;尤其是最大的 4050亿参数版本&#xff0c;成为开源社区中非常…...

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:回溯

文章目录 回溯算法组合组合总和&#xff08;Hot 100&#xff09;组合总和 II电话号码的字母组合&#xff08;Hot 100&#xff09;括号生成&#xff08;Hot 100&#xff09;分割回文串&#xff08;Hot 100&#xff09;复原IP地址子集&#xff08;Hot 100&#xff09;全排列&…...

SpringBoot线程池的使用

SpringBoot线程池的使用 在现代Web应用开发中&#xff0c;特别是在使用Spring Boot框架时&#xff0c;合理使用线程池可以显著提高应用的性能和响应速度。线程池不仅能够减少线程创建和销毁的开销&#xff0c;还能有效地控制并发任务的数量&#xff0c;避免因线程过多而导致的…...

Neural Magic 发布 LLM Compressor:提升大模型推理效率的新工具

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

HttpServletRequest req和前端的关系,req.getParameter详细解释,req.getParameter和前端的关系

HttpServletRequest 对象在后端和前端之间起到了桥梁的作用&#xff0c;它包含了来自客户端的所有请求信息。通过 HttpServletRequest 对象&#xff0c;后端可以获取前端发送的请求参数、请求头、请求方法等信息&#xff0c;并根据这些信息进行相应的处理。以下是对 HttpServle…...

React-useEffect的使用

useEffect react提供的一个常用hook&#xff0c;用于在函数组件中执行副作用操作&#xff0c;比如数据获取、订阅或手动更改DOM。 基本用法&#xff1a; 接受2个参数&#xff1a; 一个包含命令式代码的函数&#xff08;副作用函数&#xff09;。一个依赖项数组&#xff0c;用…...

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] 最终结果 结语 反爬虫的本意和其带来的挑战 在这个数字化时代社交媒体已经成为人们表达观点的重要渠道&#xff0c;对企业来说&…...

大数据新视界 -- Hive 数据桶原理:均匀分布数据的智慧(上)(9/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

【小白学机器学习33】 大数定律python的 pandas.Dataframe 和 pandas.Series基础内容

目录 0 总结 0.1pd.Dataframe有一个比较麻烦琐碎的地方&#xff0c;就是引号 和括号 0.2 pd.Dataframe关于括号的原则 0.3 分清楚几个数据类型和对应的方法的范围 0.4 几个数据结构的构造关系 list → np.array(list) → pd.Series(np.array)/pd.Dataframe 1 python 里…...

【shodan】(五)网段利用

shodan基础&#xff08;五&#xff09; 声明&#xff1a;该笔记为up主 泷羽的课程笔记&#xff0c;本节链接指路。 警告&#xff1a;本教程仅作学习用途&#xff0c;若有用于非法行为的&#xff0c;概不负责。 nsa ip address range www.nsa.gov需科学上网 搜索网段 shodan s…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...