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

C语言基础(十二)

指针的用法:

测试代码1:

#include "date.h"
#include <stdio.h>  // 函数声明,用于交换两个整数的值,通过指针传递  
void swap(int *a, int *b);  int main() {  int time = getTime();int nums[3] = {3, 1, 4}; // 定义一个包含3个整数的数组  int *p1 = &nums[0]; // 指向第一个元素的指针  int *p2 = &nums[1]; // 指向第二个元素的指针  int *p3 = &nums[2]; // 指向第三个元素的指针  // 比较并交换,以确保按从大到小排序  // 首先比较并交换 p1 和 p2 指向的值  if (*p1 < *p2) {  swap(p1, p2);  }  // 比较并交换 p1 和 p3 指向的值  if (*p1 < *p3) {  swap(p1, p3);  }  // 比较并交换 p2 和 p3 指向的值  if (*p2 < *p3) {  swap(p2, p3);  }  // 输出排序后的结果  printf("%d %d %d\n", *p1, *p2, *p3);  return 0;  
}  // 定义swap函数,用于交换两个整数的值  
void swap(int *a, int *b) {  int temp = *a;  *a = *b;  *b = temp;  
}

运行结果如下:

 

测试代码2:

#include "date.h"
#include <stdio.h>  int main() {  int time = getTime(); int arr[5] = {10, 20, 30, 40, 50}; // 定义一个包含5个整数的数组  int *ptr = arr; // 定义一个指针ptr,并将其初始化为指向数组的第一个元素  // 打印初始指针指向的元素的地址和值  printf("Initial pointer position:\n");  printf("Address: %p, Value: %d\n", (void *)ptr, *ptr);  // 遍历数组,同时打印每个元素的地址和值  for (int i = 0; i < 5; i++) {  // 打印当前元素的地址和值  printf("Address: %p, Value: %d\n", (void *)(ptr + i), *(ptr + i));  // 通过ptr + i计算和打印数组中每个元素的地址和值。// 通过指针算术访问数组中的元素,并没有改变指针的指向。}  // 递增ptr遍历数组,并打印出每个元素的地址和值。// 直接通过改变指针的指向遍历数组。printf("\nMoving the pointer and printing:\n");  for (ptr = arr; ptr < arr + 5; ptr++) {  printf("Address: %p, Value: %d\n", (void *)ptr, *ptr);  }  return 0;  
}

运行结果如下:

 

测试代码3:

#include "date.h" 
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
int main() {int time = getTime();int n;printf("请输入随机数的个数:");// 读取输入的随机数个数并存放到变量n中。scanf("%d", &n);// 动态分配一段内存,大小为n个整型变量大小,用于存储随机数。int *arr = (int *)malloc(n * sizeof(int));// 循环生成随机数并存放到arr数组中。for (int i = 0; i < n; i++) {arr[i] = rand() % 100; // 生成0-99之间的随机数}printf("打印每个元素的地址和值:\n");// 循环遍历arr数组中的每一个元素。for (int i = 0; i < n; i++) {// 打印当前元素的地址和值。printf("地址: %p, 值: %d\n", (void *)&arr[i], arr[i]);}printf("将地址转为二进制并打印:\n");for (int i = 0; i < n; i++) {// 将当前元素的地址强制转换为uintptr_t类型。uintptr_t addr = (uintptr_t)&arr[i];printf("地址: ");// 循环遍历地址的每一个二进制位。for (int j = sizeof(uintptr_t) * 8 - 1; j >= 0; j--) {// 按位输出地址的二进制。printf("%d", (addr >> j) & 1);}printf("\n");}// 释放动态分配的内存空间,防止内存泄漏。free(arr);return 0;
}

运行结果如下:

 

测试代码4:

#include "date.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//比较两个数的大小 
void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}
//选择排序 
void selectionSort(int *arr, int n) {for (int i = 0; i < n - 1; i++) {int minIndex = i;for (int j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}if (minIndex != i) {swap(&arr[i], &arr[minIndex]);}}
}int main() {int times = getTime();int n;printf("Enter the number of integers to sort: ");scanf("%d", &n);//动态分配内存 int *arr = (int *)malloc(n * sizeof(int));// 用当前时间作为随机数种子,每次生成不同的随机数srand((unsigned int)time(NULL));printf("Generated random integers:\n");for (int i = 0; i < n; i++) {arr[i] = rand() % 100;  // 生成0到99之间的随机数printf("%d\n", arr[i]);}selectionSort(arr, n);printf("Sorted array:\n");// 遍历数组 for (int i = 0; i < n; i++) {printf("%d\n", arr[i]);}printf("Max value: %d\n", arr[n-1]);printf("Min value: %d\n", arr[0]);// 释放内存 free(arr);return 0;
}

运行结果如下:

 

测试代码5:

#include "date.h" 
#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  int main() {  int times = getTime();int n, i, j;  printf("请输入n的值以定义n x n的二维数组: ");  scanf("%d", &n);  // 动态分配二维数组  int **array = (int **)malloc(n * sizeof(int *));  for (i = 0; i < n; i++) {  array[i] = (int *)malloc(n * sizeof(int));  }  // 初始化随机数种子  srand(time(NULL));  // 填充二维数组  for (i = 0; i < n; i++) {  for (j = 0; j < n; j++) {  array[i][j] = rand() % 100; // 生成0到99的随机数  }  }  // 使用指针遍历并打印二维数组  for (i = 0; i < n; i++) {  for (j = 0; j < n; j++) {  printf("Address: %p, Value: %d\n", (void *)&array[i][j], array[i][j]);  }  }  // 释放内存  for (i = 0; i < n; i++) {  free(array[i]);  }  free(array);  return 0;  
}

运行结果如下:

 

 

 

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • kubernetest中wait.Until()方法的源码解读
  • 《黑神话·悟空》是用什么编程语言开发的?
  • 豆包大模型升级:日均Tokens使用量破5000亿,字节跳动打造即刻体验的《Her》式AI
  • yield生成器生成表单字段,并进行验证,利用fetch方法和formData对象传递数据给后端,后端返回成功,返回数据
  • LambdaQueryWrapper 是 MyBatis-Plus超级利器
  • Telegram mini app 本地开发配置
  • 跟着GPT学习 Kubernetes ,简称 K8s -- Kind(三)
  • redis 过期监听:高效管理数据生命周期
  • 回归预测|基于北方苍鹰优化极端梯度提升树的数据回归预测Matlab程序NGO-XGBoost多特征输入单输出
  • 光伏电站设备设施巡视卡之转变二维码登记卡
  • 计算机毕业设计 毕业季旅游一站式定制服务平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • 使用kubeadm快速部署一套K8S集群
  • 设置虚拟机使用主机以太网而不是WiF连接
  • 普元EOS-低开页面下拉选择控件加载列表数据
  • 修改wls2上的默认用户为root
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • codis proxy处理流程
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • iOS小技巧之UIImagePickerController实现头像选择
  • leetcode-27. Remove Element
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • SpriteKit 技巧之添加背景图片
  • tensorflow学习笔记3——MNIST应用篇
  • Vue全家桶实现一个Web App
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 聊聊directory traversal attack
  • 强力优化Rancher k8s中国区的使用体验
  • 通信类
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • # 飞书APP集成平台-数字化落地
  • #include<初见C语言之指针(5)>
  • #pragam once 和 #ifndef 预编译头
  • #pragma pack(1)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (十七)Flink 容错机制
  • (五)activiti-modeler 编辑器初步优化
  • (五)Python 垃圾回收机制
  • (一)为什么要选择C++
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)socket Aio demo
  • (转)创业家杂志:UCWEB天使第一步
  • ******IT公司面试题汇总+优秀技术博客汇总
  • **PHP分步表单提交思路(分页表单提交)
  • .Net 6.0--通用帮助类--FileHelper
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题