C语言基础(十二)

news2024/11/14 19:56:14

指针的用法:

测试代码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;  
}

运行结果如下:

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS 7.9 安装部署 EchoMimic

EchoMimic学习地址&#xff1a;https://github.com/BadToBest/EchoMimic CentOS 7.9 安装部署 EchoMimic 1、创建虚拟机2、基础环境准备2.1 安装驱动2.2 下载 Anaconda3-2024.06-1-Linux-x86_64.sh2.3 下载完成后执行2.4 退出客户端重新连一下2.5 查看python版本及cuda版本 3 E…

冷硬缓存——利用缓存滥用绕过 RPC 接口安全

介绍 MS-RPC 是 Windows 操作系统的基石之一。早在 20 世纪 90 年代发布,它就已扎根于系统的大部分部分。服务管理器?RPC。Lsass?RPC。COM?RPC。甚至一些针对域控制器的域操作也使用 RPC。鉴于 MS-RPC 已经变得如此普遍,您可以预料到它已经受到严格的审查、记录和研究。 …

TinyVision 使用 SyterKit 启动 Linux 6.7 主线内核

TinyVision 使用 SyterKit 启动 Linux 6.7 主线内核 SyterKit SyterKit 是一个纯裸机框架&#xff0c;用于 TinyVision 或者其他 v851se/v851s/v851s3/v853 等芯片的开发板&#xff0c;SyterKit 使用 CMake 作为构建系统构建&#xff0c;支持多种应用与多种外设驱动。同时 Sy…

dbeaver数据库工具配置连接openGauss5.0

在DBeaver数据库工具中配置连接openGauss 5.0&#xff0c;可以通过以下步骤进行&#xff1a; 一、准备工作 下载openGauss JDBC驱动&#xff1a; 访问openGauss的官方网站&#xff08;如https://opengauss.org/zh/&#xff09;&#xff0c;下载适用于您操作系统的JDBC驱动。对…

【01】Eclipse中配置spring的xsd 便于从本地加载而非网络

spring xsd 文章目录 spring xsd1.spring的xsd在Eclipse中的配置1.1xsi:schemaLocation1.2Eclipse中设置的key名1.3在本地文件系统中选择xsd文件进行配置1.4在workspace工作空间中选择xsd文件进行配置 2.重点2.1Key的配置2.2spring配置文件中xml的xsi:schemaLocation的配置变更…

Java重修笔记 第三十九天 集合的体系、Collection方法、迭代器遍历集合、增强for循环遍历集合

集合的体系 1. 单列集合 2. 双列集合 Collection的常用方法 1. boolean add(E e) 添加元素&#xff0c;添加基本数据类型的元素有自动装箱的过程 2. boolean remove(Object o) 删除指定元素&#xff0c;删除成功返回true 3. boolean contains(Object o) 查询指定元素&…

深度学习入门-04

PS&#xff1a;基于小土堆视频学习 1、add_image()的使用 读取样本集中的数据 image_path "data/train/ants_image/0013035.jpg" from PIL import Image img Image.open(image_path)在pycharm的控制台中运行该代码&#xff0c;运行后可以发现&#xff1a; 数据格…

前端面试宝典【设计模式】【4】

在前端开发的世界里,每一次面试都是一次机遇,也是一次挑战。 你是否曾因技术深度不够而错失良机? 或是面对最新的技术趋势感到迷茫? 我们的【前端面试宝典】正是为此而来。 由拥有多年一线实战经验的资深工程师亲自授课,结合最新的行业动态与实战案例,旨在全面提升你的技…

学习大数据DAY44 帆软 report 配置

目录 Linux 系统独立部署 Tomcat 服务器设置 上机练习 Linux 系统独立部署 ## 题目要求 在 LINUX 系统&#xff0c; Tomcat 服务器容器下&#xff0c;完成 FineReport 报表工程的独立部 署&#xff0c;并设置服务器开机自启动&#xff0c;并请实操演示 得分点&#xf…

全感知、全覆盖、全智能的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算法加…

牛客练习小题

目录 牛客. 矩阵最长递增路径 牛客.奇数位丢弃 牛客.天使果冻 牛客.dd爱旋转 牛客. 矩阵最长递增路径 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** 递增路径的最大长…

【C++ Primer Plus习题】3.5

问题: 解答: #include <iostream> using namespace std;int main() {long long populationWorld 0;long long populationChina 0;cout << "请输入全球的人口数:";cin >> populationWorld;cout << "请输入中国的人口数:";cin &g…

【STM32】RTT-Studio中HAL库开发教程五:UART的DMA应用

文章目录 一、简介1.关于DMA2.DMA使用场景3.DMA控制结构4.IDLE空闲中断5.实现方法 二、RTT配置三、串口收发流程四、完整代码五、测试验证 一、简介 1.关于DMA DMA(Direct Memory Access&#xff0c;直接存储器访问) 是所有现代电脑的重要特色&#xff0c;它允许不同速度的硬件…

谷粒商城实战笔记-249-商城业务-消息队列-RabbitMQ工作流程

文章目录 一&#xff0c;基本概念二&#xff0c;消息从producer到consumer的过程 一&#xff0c;基本概念 RabbitMQ是一个流行的开源消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;。以下是RabbitMQ的一些基本概念&#xff1a; Broker&#x…

真题解析 | CCF CSP-J 2020 入门级 C++语言真题及答案

一、单项选择题(共15题&#xff0c;每题2分&#xff0c;共计30分;每题有且仅有一个正确选项) 解析&#xff1a;常识题。在计算机内存中&#xff0c;每个存储单元都有一个唯一的标识号&#xff0c;这个标识号被称为地址。地址用来唯一标识内存中的每个存储单元&#xff0c;类似于…

【Stream】流媒体从入门到入土 (1)

最近工作需要学了很多流媒体相关的知识&#xff0c;谁能想象一个月前还是只听说过 HLS 的快乐小屁孩&#xff0c;现在已经背负了巨大的知识的重担了&#xff0c;头发也秃了几根&#xff0c;发际线严重后移 H.264 (AVC) vs H.265 (HEVC) H.264 和 H.265 是两种视频编码&#x…

【学习笔记】Day 22

一、进度概述 1、机器学习常识23-24&#xff0c;以及相关代码复现 2、python 补完计划&#xff08;详见 python 专题&#xff09; 二、详情 23、U-Net 从宏观结构上来讲&#xff08;以下摘自常识23&#xff09;&#xff1a; U-Net 就是 U 形状的网络, 前半部分 (左边…

[Android studio]无法联网

问题情景&#xff1a; 我的Android studio 更新软件到 Android Studio Koala | 2024.1.1 Patch 1 这个版本后&#xff0c;当前的项目无法正常编译。 因为之前有次更新版本后&#xff0c;我也遇到这个无法编译的问题&#xff0c;后面给解决掉了。想着这次应该也没有事情。 可这…

【通信协议】SPI总线

目录 SPI简介 硬件电路 SPI模式 软件模拟初始化 时序基本单元 起始条件 终止条件 发送与接收 SPI基本单元代码 MySPI.h MySPI.c SPI简介 SPI&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;即串行外围设备接口&#xff0c;是由Motorola公司开…