C语言基础(十五)

指针的使用:

测试代码1:
 

#include <stdio.h>  // 标准的 main 函数声明,包括可选的 envp 参数  
int main(int argc, char *argv[], char *envp[]) {  // argc 命令行参数的数量(包括程序名)  // argv 指向字符指针的指针数组,每个元素都是一个指向参数的字符串  // envp 指向环境变量的指针数组,每个元素都是一个指向环境字符串的指针 int time = getTime();// 打印程序名  printf("Program name: %s\n", argv[0]);  // 遍历命令行参数(除了程序名)  for (int i = 1; i < argc; i++) {  printf("Argument %d: %s\n", i, argv[i]);  }  // 通常不会在这里处理 envp,大多数程序中不是必需的。  // 如果需要访问环境变量 if (envp != NULL) {  for (int i = 0; envp[i] != NULL; i++) {  // 打印环境变量字符串,没有解析。 printf("Environment variable %d: %s\n", i, envp[i]);  }  }  return 0;  
}

运行结果如下:

 

测试代码2:

#include "date.h"
#include <stdio.h>  int main() {  int time = getTime();int a = 10;  int b = 20;  // 定义两个整数指针  int *ptr1 = &a;  int *ptr2 = &b;  // 二级指针,初始时指向ptr1  int **pptr = &ptr1;  const char *ptr = "Hello";const char **ptr_ptr = &ptr;printf("Value of ptr: %s\n", ptr);printf("Value of ptr_ptr: %s\n", *ptr_ptr);printf("Before change: *ptr1 = %d, *ptr2 = %d\n", *ptr1, *ptr2);  // 通过pptr改变ptr1的值,让它指向ptr2所指向的地址  *pptr = ptr2;  // ptr1现在指向的是ptr2所指向的地址  printf("After change: *ptr1 = %d, *ptr2 = %d\n", *ptr1, *ptr2);  return 0;  
}

运行结果如下:

 

测试代码3:

#include "date.h" 
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h> 
// 二级指针 
int main() {  int time = getTime();// 存储3个字符串  int numStrings = 3;  char **strings = (char **)malloc(numStrings * sizeof(char *));  // 检查malloc是否成功  if (strings == NULL) {  perror("Failed to allocate memory for strings");  return 1;  }  // 为每个字符串分配内存  for (int i = 0; i < numStrings; i++) {  strings[i] = (char *)malloc(50 * sizeof(char)); // 每个字符串最多49个字符加上一个'\0'  if (strings[i] == NULL) {  perror("Failed to allocate memory for a string");  // 释放之前分配的内存  for (int j = 0; j < i; j++) {  free(strings[j]);  }  free(strings);  return 1;  }  }  // 填充字符串  strcpy(strings[0], "Hello");  strcpy(strings[1], "World");  strcpy(strings[2], "C Programming");  // 通过二级指针访问和打印字符串  for (int i = 0; i < numStrings; i++) {  printf("%s\n", *(strings + i)); // 或者 strings[i]  }  // 释放内存  for (int i = 0; i < numStrings; i++) {  free(strings[i]);  }  free(strings);  return 0;  
}

运行结果如下:

 

测试代码4:

#include "date.h" 
#include <stdio.h>  int add(int a, int b) {  return a + b;  
}  int main() {  int time = getTime();// 基本数据类型的指针int var = 20;  int *ptr = &var;  printf("基本数据类型的指针: Value of var: %d, Value of *ptr: %d\n", var, *ptr);  *ptr = 22;  printf("修改后: Value of var: %d\n", var);  // 数组指针int arr[] = {10, 20, 30, 40, 50};  int *arrPtr = arr;  printf("数组指针: Value of arr[0]: %d, Value of arrPtr[0]: %d\n", arr[0], arrPtr[0]);  for (int i = 0; i < 5; i++) {  printf("arr[%d] = %d\n", i, *(arrPtr + i));  }  // 函数指针 int (*funcPtr)(int, int) = add;  int result = funcPtr(10, 20);  printf("函数指针: Result: %d\n", result);  // 二级指针(指针的指针)int var2 = 3000;  int *ptr2 = &var2;  int **pptr = &ptr2;  printf("二级指针: Value of var2: %d, Value of **pptr: %d\n", var2, **pptr);  **pptr = 4000;  printf("修改后: New value of var2: %d\n", var2);  return 0;  
}

运行结果如下:

 

测试代码5:

#include "date.h" 
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  // 函数声明  
int countSubstring(const char *str, const char *substr);  int main() {  int time = getTime();char *inputStr = NULL; // 使用NULL初始化指针  char *searchStr = NULL; // 使用NULL初始化指针  int length, capacity = 1024; // 设置初始容量  int count;  // 分配内存给主串  inputStr = (char *)malloc(capacity * sizeof(char));  if (inputStr == NULL) {  perror("内存分配失败");  return 1;  }  // 分配内存给子串  searchStr = (char *)malloc(capacity * sizeof(char));  if (searchStr == NULL) {  free(inputStr);  perror("内存分配失败");  return 1;  }  // 输入主串  printf("请输入主串: ");  fgets(inputStr, capacity, stdin);  // 去除fgets读取的换行符  inputStr[strcspn(inputStr, "\n")] = 0;  // 输入子串  printf("请输入子串: ");  fgets(searchStr, capacity, stdin);  // 去除fgets读取的换行符  searchStr[strcspn(searchStr, "\n")] = 0;  // 检查输入是否为空  if (strlen(inputStr) == 0 || strlen(searchStr) == 0) {  printf("输入不能为空!\n");  free(inputStr);  free(searchStr);  return 1;  }  // 统计子串在主串中出现的次数  count = countSubstring(inputStr, searchStr);  printf("'%s' 在 '%s' 中出现了 %d 次。\n", searchStr, inputStr, count);  // 释放内存  free(inputStr);  free(searchStr);  return 0;  
}  // 统计子串在主串中出现的次数  
int countSubstring(const char *str, const char *substr) {  int count = 0;  const char *tmp = str;  while ((tmp = strstr(tmp, substr)) != NULL) {  count++;  tmp++; // 移动到下一个字符,可能会错过重叠的子串  // 如果需要计算重叠子串,可以注释掉上面这行}  return count;  
}

运行结果如下:

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/407895.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【html+css 绚丽Loading】000015 九转轮回珠

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

hyper-v ubuntu下连接嵌入式linux板卡

用hyper-v非常的方便&#xff0c;不用装vm也不会那么臃肿&#xff0c;但如何在hyper-v和嵌入式板卡之间进行通讯呢&#xff1f; 1.环境 采用的是100ask-imx6ull板卡&#xff0c;hyper-v装的是ubuntu22系统。 hyper-v根据文章hyper-v上外网已经配置了一个虚拟网卡。 2.物理连…

前端技术(四)—— 最经典Node.JS全套教程

一、node简介 1. 浏览器中的 JavaScript 的组成部分 2. 思考&#xff1a;为什么 JavaScript 可以在浏览器中被执行 3.思考&#xff1a;为什么 JavaScript 可以操作 DOM 和 BOM 4. 浏览器中的 JavaScript 运行环境 5. 思考&#xff1a;JavaScript 能否做后端开发 6. Node.js介绍…

数据仓库建模的步骤-从需求分析到模型优化的全面指南

想象一下,你正站在一座巨大的图书馆前。这座图书馆里存放着你公司所有的数据。但是,书籍杂乱无章,没有分类,没有索引。你如何才能快速找到所需的信息?这就是数据仓库建模要解决的问题。本文将带你深入了解数据仓库建模的主要步骤,让你掌握如何将杂乱的数据转化为有序、高效、易…

React antd Table表格动态合并单元格

注意&#xff1a; ① 采用的是React antDsign 4.x版本 ② 需重新处理data数据 实现效果 代码实现 import React from react; import { Table } from antd;const data [{key: 0,name: 张三,age: 22,sex: 男,},{key: 1,name: 李四,age: 42,sex: 男,},{key: 2,name: 小丽,age: …

yolo V8训练 长条状目标

1、说明 目标数据集合中有很多长条状图片&#xff0c;如果直接Resize 会严重拉伸&#xff0c;因此采用把长条图像裁剪成2段&#xff0c;然后将裁剪后的2段图片拼接在一起。 2、代码 2.1 C 代码 &#xff08;部署&#xff0c;模型推理时C &#xff09; #include <stdio.h…

ML307R_APP_DEMO_SDK TCP/UDP使用介绍

ML307R_APP_DEMO_SDK是在ML307R_OpenCPU_Standard_SDK标准代码基础上&#xff0c;新增了面向用户APP层的demo示例&#xff0c;与标准代码中examples的示例代码不同&#xff0c;app_demo实现了联网自动化&#xff0c;数据透传&#xff0c;各功能可独立自动运行&#xff0c;并对用…

【Oracle点滴积累】解决ORA-29913和KUP-04095: preprocessor command的方法

广告位招租&#xff01; 知识无价&#xff0c;人有情&#xff0c;无偿分享知识&#xff0c;希望本条信息对你有用&#xff01; 今天和大家分享ORA-29913: error in executing ODCIEXTTABLEFETCH callout和KUP-04095: preprocessor command错误的解决方法&#xff0c;本文仅供参…

ArcGIS Pro基础:如何将数据和引用地图样式一起打包分享

如上所示&#xff0c;有2个矢量图斑&#xff0c;一个是耕地地块&#xff0c;另一个是范围图斑&#xff0c;如果我们需要把此工程的所有数据以及引用地图一起分享给别人&#xff0c;就可以使用【打包工程】这个工具。 如上所示&#xff0c;在【地理处理】下输入【打包工程】&am…

AI绘画【SD教程】进阶篇,文生图复现金克斯动漫形象,用AnimateDiff动画插件让她动起来!AI动画教程建议收藏

大家好&#xff0c;我是画画的小强 当你成功安装了AI绘画工具 SD&#xff08;Stable Diffusion&#xff09;后&#xff0c;是否也产生过这样的疑惑&#xff1a;为何我创作的图片与他人的作品在风格和质量上存在差异&#xff1f; 实际上&#xff0c;在AI绘画的领域中&#xff…

java-3 多态

什么是多态 对象多态&#xff0c;行为多态 方法&#xff1a;编译看左边&#xff0c;运行看右边 变量&#xff1a;编译运行都看左 为什么呢&#xff1f; 多态强调的是对象多态和行为多态&#xff0c;可没说变量多态 使用多态的好处 编译看左边&#xff0c;不能调用子类独有的…

景联文科技高质量文本标注:驱动自然语言处理技术的发展与应用

文本标注是自然语言处理&#xff08;NLP&#xff09;领域的一个重要环节&#xff0c;是指在文本数据上添加额外的信息或标记的过程&#xff0c;目的是为了让计算机能够理解和处理这些文本数据。 通过文本标注&#xff0c;可以为文本中的各个部分提供具体的含义和上下文信息&…

谷粒商城篇章11--P311-P325--秒杀服务【分布式高级篇八】

目录 1 后台添加秒杀商品 1.1 配置优惠券服务网关 1.2 添加秒杀场次 1.3 上架秒杀商品 2 定时任务 2.1 cron 表达式 2.2 cron表达式特殊字符 2.3 cron示例 3 秒杀服务 3.1 创建秒杀服务模块 3.1.1 pom.xml 3.1.2 application.yml配置 3.1.3 bootstrap.yml配置 3.…

HT97180 125mW免输出耦合电容的立体声线路驱动器1耳机放大器

特点 输出无需隔直流电容 卓越的低音效果 无咔嗒/噼噗声 低THDN:最低0.002% 低噪声&#xff0c;VN:8uV 支持单端输入和全差分输入 1.65V至4.8V较宽的电源工作范围 输出功率:125mW(fIN1kHz,VDD4.2V RL32Ω,THDN0.1%) 无铅封装, QFN16L-PP 3mm*3mm 概述 HT97180(L)是一款差分…

line-height的使用场景

line-height:字面含义为行高&#xff0c;行高有三部分组成&#xff0c;分为内容高度&#xff0c;上间距&#xff0c;下间距。 可以看到文本在div盒子中的默认位置是左上角。此时文字部分的行高只有内容高度在支撑&#xff0c;上间距和下间距都是0。鼠标在字体上滑动时的蓝色部…

超融合/分布式 IT 架构有哪些常见故障类型?如何针对性解决和预防?

本文刊于《中国金融电脑》2024 年第 7 期。 作者&#xff1a;SmartX 金融团队 以超融合为代表的分布式 IT 基础架构凭借其高性能、高可靠和灵活的扩展能力&#xff0c;在满足大规模、高并发、低延迟业务需求等方面展现出显著优势&#xff0c;成为众多金融机构构建 IT 基础设施…

初识模版(C++)

初识模版&#xff08;C&#xff09; 模版是C的一个重大发明&#xff0c;是让C突飞猛进的原因之一。 泛型编程 实现一个通用的交换函数&#xff1f; void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, doubl…

DockerHub解决镜像拉取之困

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

从零开始搭建Aliyun ESC高可用集群 (HaVip+KeepAlived)

从零开始搭建Aliyun ESC高可用集群 (HaVip+KeepAlived) 架构 架构 本设计方案采用两台阿里云ECS服务器搭建Keepalived结合LVS的高可用集群。使用LVS的TUN模式进行负载均衡,同时利用阿里云的弹性IP(EIP)与高可用虚拟HaVIP实现跨服务器的高可用性。架构中,一台ECS服务器作为…

DFS 算法:记忆化搜索

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 无 此系列更新频繁&#xff0c;求各位读者点赞 关…