C语言基础(十四)

ops/2024/9/23 3:16:13/

指针的使用:

测试代码1:

#include "date.h" 
#include <stdio.h>  // 加法函数  
int add(int a, int b) {  return a + b;  
}  // 减法函数  
int subtract(int a, int b) {  return a - b;  
}  // 定义一个指向接收两个int参数并返回int的函数  
typedef int (*FuncPtr)(int, int);  // 定义一个函数,接收一个指向函数的指针和两个整数作为参数  
void applyFunction(FuncPtr func, int x, int y) {  int result = func(x, y);  printf("Result: %d\n", result);  
}  int main() {  int time = getTime(); // 调用applyFunction并传递add函数作为参数  applyFunction(add, 5, 3); // 调用applyFunction并传递subtract函数作为参数  applyFunction(subtract, 9, 12); return 0;  
}

运行结果如下:

 

测试代码2:

#include "date.h"
#include <stdio.h>  
#include <string.h>  
int main() {  int time = getTime();// 声明字符指针并初始化  const char *ptr = "Hello, World!";  // 不能直接修改ptr指向的字符串(因为是字符串常量),  char str[50] = "C programming";  char *ptr2 = str; // ptr2 现在指向 str  printf("String pointed by ptr: %s\n", ptr);  // 使用字符指针和标准库函数  strcpy(ptr2, "New programming language");  printf("After strcpy: %s\n", ptr2);  // 通过指针算术访问和修改字符串  ptr2[5] = 'S'; // 修改字符  printf("Modified string: %s\n", ptr2);  return 0;  
}

运行结果如下:

 

测试代码3:

#include "date.h" 
#include <stdio.h>  
// 自定义 strcpy 函数  
void my_strcpy(char *dest, const char *src) {  // 遍历源字符串,直到遇到空字符  while (*src != '\0') {  // 将源字符串的当前字符复制到目标字符串  *dest = *src;  // 移动指针到下一个字符  dest++;  src++;  }  // 在目标字符串的末尾添加空字符  *dest = '\0';  
}  int main() {  int time = getTime();char source[] = "Hello, World!";  char destination[50]; // 确保目标数组足够大以容纳源字符串  // 使用自定义的 strcpy 函数复制字符串  my_strcpy(destination, source);  // 输出复制后的字符串  printf("Copied string: %s\n", destination);  return 0;  
}

运行结果如下:

 

测试代码4:

#include "date.h"
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  int main() {  int time = getTime();// 使用字符数组存储字符串  char strArray[50] = "Hello, World from an array!";  // 访问和修改字符数组中的元素  printf("Original string in array: %s\n", strArray);  strArray[7] = 'C'; // 修改数组中的字符  printf("Modified string in array: %s\n", strArray);  // 使用字符指针和动态内存分配存储可修改的字符串  char *dynamicStr = (char *)malloc(50 * sizeof(char)); // 分配内存  if (dynamicStr != NULL) {  strcpy(dynamicStr, "Hello, World from dynamically allocated memory!");  // 访问动态分配的字符串  printf("String from dynamic memory: %s\n", dynamicStr);  // 修改动态分配的字符串  dynamicStr[7] = 'E';  printf("Modified string from dynamic memory: %s\n", dynamicStr);  // 释放动态分配的内存  free(dynamicStr);  } else {  // 如果内存分配失败  printf("Memory allocation failed!\n");  }  // 不要访问dynamicStr,已经被释放了  return 0;  
}

运行结果如下:

 

测试代码5:

#include "date.h"
#include <stdio.h>  
// 指针数组特别适用于处理字符串数组、动态数据结构(如链表和树)中的节点指针等场景。 
int main() {  int time = getTime();// 定义并初始化整型指针数组  int a = 10, b = 20, c = 30;  int *intArr[3] = {&a, &b, &c};  // 访问并修改整型指针数组指向的值  for(int i = 0; i < 3; i++) {  printf("Original %d: %d\n", i, *(intArr[i]));  *(intArr[i]) += 10; // 将每个值增加10  }  // 再次访问并打印修改后的值  printf("\nModified values:\n");  for(int i = 0; i < 3; i++) {  printf("%d ", *(intArr[i]));  }  printf("\n");  // 定义并初始化字符串指针数组  const char *strArr[3] = {"Hello", "World", "!"};  // 遍历并打印字符串指针数组中的每个字符串  printf("\nString array:\n");  for(int i = 0; i < 3; i++) {  printf("%s ", strArr[i]);  }  printf("\n");  return 0;  
}

运行结果如下:

 

测试代码6:

#include "date.h"
#include <stdio.h>
#include <string.h>// 快速排序的分区函数
int partition(const char *arr[], int low, int high) {const char *pivot = arr[high]; // 选择最后一个元素作为基准int i = low - 1; // 较小元素的索引for (int j = low; j <= high - 1; j++) {// 如果当前元素小于或等于pivotif (strcmp(arr[j], pivot) >= 0) {i++; // 移动较小元素的索引// 交换arr[i]和arr[j]const char *temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}// 交换arr[i+1]和arr[high](或pivot)const char *temp = arr[i + 1];arr[i + 1] = arr[high];arr[high] = temp;return (i + 1);
}// 快速排序函数
void quickSort(const char *arr[], int low, int high) {if (low < high) {// pi是分区后基准的索引int pi = partition(arr, low, high);// 分别对基准前后的子数组进行排序quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}// 查找并返回最小字符串的索引(不需要,因为数组已排序)
int findMinStringIndex(const char *arr[], int n) {return 0; // 排序后,最小字符串在索引0处
}int main() {int time = getTime();// 初始化字符串指针数组const char *strings[] = {"banana", "apple", "cherry", "date"};int n = sizeof(strings) / sizeof(strings[0]);// 排序字符串quickSort(strings, 0, n - 1);// 打印排序后的字符串printf("Sorted strings (from largest to smallest):\n");for (int i = 0; i < n; i++) {printf("%s\n", strings[i]);}// 由于已经排序,所以最小字符串就是第一个printf("The smallest string is: %s\n", strings[0]);return 0;
}

运行结果如下:

 

 

 

 

 

 


http://www.ppmy.cn/ops/98825.html

相关文章

chmod命令学习1

理解权限的基础 chmod命令可以修改与文件或目录相关联的权限&#xff0c;Linux是如何理解这些权限的。 Linux认为有三组用户会使用文件或目录&#xff0c;即实际拥有者&#xff08;也称为文件的用户&#xff09;、用户组及系统中的其他人。每组用户分别用不同的字母表示&#…

google浏览器chrome用户数据(拓展程序,书签等)丢失问题

一、问题背景 我出现这个情况的问题背景是&#xff1a;因为C盘块满了想清理一部分空间&#xff08;具体看这&#xff1a;windows -- C盘清理_c盘softwaredistribution-CSDN博客&#xff09;&#xff0c;于是找到了更改AppDatta这个方法&#xff0c;但因为&#xff0c;当时做迁移…

DM8守护集群部署、数据同步验证、主备切换

1. 环境描述 实例详情 端口详情 2. 部署步骤 2.1 数据准备 2.1.1主库初始化 [dmdbaray1 ~]$ cd /dmdba/dmdbms/bin [dmdbaray1 bin]$ ./dminit path/dmdba/data PAGE_SIZE32 EXTENT_SIZE32 CASE_SENSITIVEy CHARSET1 DB_NAMEGRP1_RT_01 INSTANCE_NAMEGRP1_RT_01 PORT_NU…

单例模式在实现webserver这个项目中起到了什么作用

在实现WebServer项目中&#xff0c;单例模式通常用于确保某些全局或关键组件在整个应用程序中只有一个实例&#xff0c;并且这个实例可以被多个线程或模块安全地访问和共享。以下是单例模式在WebServer项目中的具体作用&#xff1a; 1. 全局配置管理 WebServer通常需要加载和…

机器学习术语

迭代次数 想象你在玩一个拼图游戏&#xff0c;每次尝试把一块拼图放对位置就是一次操作。迭代次数就好比你尝试拼这个拼图的总次数。 在机器学习中&#xff0c;模型不断地调整参数来更好地拟合数据&#xff0c;每一次这样的调整就是一次迭代。 如果迭代次数太少&#xff0c;…

黑神话:悟空游戏用的什么服务器?

黑神话&#xff1a;悟空游戏用的什么服务器&#xff1f;《黑神话&#xff1a;悟空》游戏使用的是基于云计算的强大服务器&#xff0c;具体型号和配置未公开。这些服务器在游戏发布初期就表现出极强的处理能力和稳定性&#xff0c;尽管同时在线人数一度突破百万&#xff0c;但整…

2161.根据给定数字划分数组

1.题目描述 给你一个下标从 0 开始的整数数组 nums 和一个整数 pivot 。请你将 nums 重新排列&#xff0c;使得以下条件均成立&#xff1a; 所有小于 pivot 的元素都出现在所有大于 pivot 的元素 之前 。所有等于 pivot 的元素都出现在小于和大于 pivot 的元素 中间 。小于 piv…

记录一次搭建uniapp-vue3的基础项目

1.使用 HBuilder X 创建uniapp vue3的基础项目 2.安装 自动导包插件 unplugin-auto-import npm install unplugin-auto-import或者 pnpm install unplugin-auto-import2.1 根目录下创建 vite.config.js 复制粘贴以下内容 import { defineConfig } from vite import uni fro…