C基础(六)指针,指针的基础概念、变量定义、运算、大小等

指针:

  1. 什么是指针:指针表示内存地址,平时所说的指针一般是保存地址的指针变量。
  2. 定义指针变量
    • 格式:数据类型 *指针变量名。
    • 初始化和赋值:指针指向变量的首地址。定义指针后若未赋值则为野指针;可将变量地址赋给指针使其指向该变量;还可定义指针时初始化为NULL(空地址)。
    • 通过指针的间接访问:直接通过变量名访问是直接访问,通过变量地址(指针)访问是间接访问,对地址进行解引用(取*)可通过指针访问变量。*在定义指针变量和对地址解引用时用法不同。
  3. 指针的运算:指针常用加法和减法运算,加减运算表示向后或向前偏移n个字节,n由指针的数据类型决定。
  4. 指针的大小:指针大小和数据类型无关,由操作系统决定,32位操作系统占4Byte,64位操作系统占8Byte。
  5. 指针和一维整形数组:数组名表示数组首地址,指针指向一维数组时,可直接将数组名赋值给指针。存在多种等价关系,如[i]<==>对地址先偏移i个字节,再解引用(取*) ,arr[i]<==>*(p+i)等。

练习:(1)使用指针输入输出数组元素

// 使用指针输入输出数组元素
#include<stdio.h>
int main(int argc, const char *argv[])
{
    int arr[5]; // 定义一个包含5个整数的数组
    int *p = arr; // 指针p指向arr数组
    int i;

    // 输入数组元素
    for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        printf("请输入第%d个整数:", i + 1);
        scanf("%d", p + i); // 使用指针输入数组元素
    }

    // 输出数组元素
    printf("数组元素为:\n");
    for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        printf("%d\t", *(p + i)); // 使用指针输出数组元素
    }
    printf("\n");

    return 0;
}

解释:

  1. 第2行:包含标准输入输出头文件 stdio.h
  2. 第4行:定义主函数 main,参数为命令行参数的数量和内容。
  3. 第6行:声明一个包含5个整数的数组 arr
  4. 第7行:声明一个指向数组的指针 p 并初始化为指向 arr
  5. 第8行:声明循环变量 i
  6. 第11-15行:提示用户输入5个整数,并通过指针 p 将输入的值存储到数组中。
  7. 第18行:输出数组元素的提示信息。
  8. 第19-21行:通过指针 p 遍历数组并输出每个元素的值,以制表符分隔。
  9. 第22行:在输出完所有元素后换行。
  10. 第23行:返回0,表示程序正常结束。

     (2)数组最大值

// 数组最大值
#include<stdio.h>
int main()
{
    int arr[] = {12, 34, 56, 78, 90}; // 定义一个包含5个整数的数组
    int *p = arr; // 定义一个指向数组的指针
    int max = *p; // 假设第一个元素是最大值
    int size = sizeof(arr) / sizeof(arr[0]); // 计算数组的大小

    for (int i = 1; i < size; i++)
    {
        if (*(p + i) > max)
        {
            max = *(p + i); // 更新最大值
        }
    }

    printf("数组中的最大值是:%d\n", max);
    return 0;
}

解释:

  1. 第2行:包含标准输入输出头文件 stdio.h
  2. 第4行:定义主函数 main
  3. 第6行:声明并初始化一个包含5个整数的数组 arr
  4. 第7行:声明一个指向数组的指针 p 并初始化为指向 arr
  5. 第8行:假设第一个元素是最大值,将其赋值给 max
  6. 第9行:计算数组的大小,并将其赋值给 size
  7. 第11-15行:遍历数组(从第二个元素开始),如果发现比当前 max 更大的元素,则更新 max
  8. 第17行:输出数组中的最大值。
  9. 第18行:返回0,表示程序正常结束。

作业:

输入带空格的字符串,删除字符串中的空格

#include<stdio.h>
int main()
{
    char str[100];
    char result[100]; // 用于存储没有空格的结果字符串的数组
    char *p = str; // 指向输入字符串的指针
    char *q = result; // 指向结果字符串的指针
    printf("请输入一个字符串:");
    gets(str); // 使用 gets 获取输入字符串
    // 如果存在换行符,则将其移除
    while (*p != '\0')
    {
        if (*p == '\n')
        {
            *p = '\0';
            break;
        }
        p++;
    }
    p = str; // 重置指针到字符串开头
    // 处理字符串以删除空格
    while (*p != '\0')
    {
        if (*p != ' ')
        {
            *q = *p;
            q++;
        }
        p++;
    }
    *q = '\0'; // 终止结果字符串
    printf("删除空格后的字符串:%s\n", result);
    return 0;
}

解释:

  1. 第327行:定义主函数 main
  2. 第329行:声明字符数组 str 用于存储输入的字符串。
  3. 第330行:声明字符数组 result 用于存储没有空格的结果字符串。
  4. 第331行:声明指针 p 并初始化为指向 str
  5. 第332行:声明指针 q 并初始化为指向 result
  6. 第334行:提示用户输入一个字符串。
  7. 第335行:使用 gets 函数获取输入字符串并存储在 str 中。
  8. 第336-344行:检查并移除字符串中的换行符。
  9. 第345行:将指针 p 重置为指向 str 的开头。
  10. 第347-356行:遍历字符串 str,并将非空格字符复制到 result 中。
  11. 第357行:在 result 末尾添加空字符 '\0' 以终止字符串。
  12. 第358行:打印删除空格后的字符串。
  13. 第359行:返回 0,表示程序正常结束。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【R语言】获取数据

R语言自带2种数据存储格式&#xff1a;*.RData和*.rds。 这两者的区别是&#xff1a;前者既可以存储数据&#xff0c;也可以存储当前工作空间中的所有变量&#xff0c;属于非标准化存储&#xff1b;后者仅用于存储单个R对象&#xff0c;且存储时可以创建标准化档案&#xff0c…

央行发布《贸易金融分布式账本技术要求》,参考架构包括5部分

《银行科技研究社》(作者 木子剑):2024年12月11日,中国人民银行发布金融行业标准《贸易金融分布式账本技术要求》(JR/T 0308-2024)(以下简称“《要求》”),当日实施。据悉,该文件的起草单位包括6大行和多家股份制银行等。 《要求》规定了分布式账本技术在贸易金融领域…

CSS盒模型详解:从零开始理解margin、border、padding

引言 在CSS中&#xff0c;盒模型(Box Model)是一个非常基础且重要的概念。它定义了网页中每个元素如何占据空间以及元素间的关系。今天&#xff0c;我们就通过简单的例子来理解盒模型的构成。 盒模型的组成部分 CSS盒模型主要由四个部分组成&#xff08;从外到内&#xff09…

DS图(中)(19)

文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下&#xff0c;我们来学习下图的中篇&#xff01;&#xff01;&#xff01; 一、图的遍历 图的遍历指的是遍历图中的顶点&#xff0c;主要有 广度优先遍历 …

112,【4】攻防世界 web weak_auth

之前做过&#xff0c;回顾 进入靶场 输入admin 123456 不是&#xff0c;这也行&#xff0c;什么闭合方式&#xff0c;注释符都没用上 反而不自然了 不过输入admin 123456 纯属个人习惯 假如我没那么输&#xff0c;或者用户名&#xff0c;密码不是这两个&#xff0c;我该怎…

蓝桥杯更小的数(区间DP)

题目描述 小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串&#xff0c;下标从 0 到 n − 1&#xff0c;你可以将其视作是一个具有 n 位的十进制数字 num&#xff0c;小蓝可以从 num 中选出一段连续的子串并将子串进行反转&#xff0c;最多反转一次。小蓝想要将选出的…

109,【1】攻防世界 web 题目名称-文件包含

进入靶场 直接显示源代码 提示我们通过get方式传递名为filename的参数&#xff0c;同时给出了文件名check.php filenamecheck.php 显示使用了正确的用法&#xff0c;错误的方法 filename./check.php 还是一样的回显 傻了&#xff0c;题目名称是文件包含&#xff0c;需要用到…

71.StackPanel黑白棋盘 WPF例子 C#例子

就是生成黑白棋盘&#xff0c;利用该控件能自动排列的功能。用一个横向的StackPanel嵌套纵向的StackPanel&#xff0c;然后在里面添加设定好长和高的矩形。 因为StackPanel是按照控件的大小展示的。所以如果不设置长和宽。就会显示不出矩形。 <StackPanel Orientation"…

DeepSeek之python实现API应用

先创建一个API KEY https://platform.deepseek.com/api_keys python脚本实现 # Please install OpenAI SDK first: `pip3 install openai`from openai import OpenAIclient = OpenAI(api_key="", base_url="https://api.deepseek.com")response = cli…

MySQL中like模糊查询如何优化?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL中like模糊查询如何优化&#xff1f;】面试题。希望对大家有帮助&#xff1b; MySQL中like模糊查询如何优化&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中&#xff0c;LIKE模糊查询通常会影…

通过docker安装部署deepseek以及python实现

前提条件 Docker 安装:确保你的系统已经安装并正确配置了 Docker。可以通过运行 docker --version 来验证 Docker 是否安装成功。 网络环境:保证设备有稳定的网络连接,以便拉取 Docker 镜像和模型文件。 步骤一:拉取 Ollama Docker 镜像 Ollama 可以帮助我们更方便地管理…

制作PE启动盘(内含Win11 iso镜像)

前言 本文用于记录制作PE启动盘过程&#xff0c;学习记录用&#xff0c;如有不对请指出&#xff0c;谢谢&#xff01; 参考视频&#xff1a; 1. 微PE下载&#xff1a;https://www.bilibili.com/video/BV1vT4y1n7JX/?spm_id_from333.788.top_right_bar_window_history.conte…

128陷阱

首先我们了解一下关于包装器类型 java是面向对象的语言&#xff0c;但基本类型并不是面向对象的&#xff0c;从而出现了包装器类型&#xff0c;并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型&#xff0c;它相当于将…

javaEE-9.HTML入门

目录 一.什么是html 二.认识html标签 1.标签的特点: 2.html文件基本结构 3.标签的层次结构 三、html工具 四、创建第一个文件 五.html常见标签 1标题标签h1-h6 2.段落标签:p 3.换行标签:br 4.图片标签:img 图片路径有1三种表示形式: 5.超链接:a 链接的几种形式: …

开源 GPU 集群管理器 GPUStack

GPUStack 是一个用于运行 AI 模型的开源 GPU 集群管理器。 项目地址&#xff1a;gpustack/gpustack: Manage GPU clusters for running AI modelshttps://github.com/gpustack/gpustackhttps://github.com/gpustack/gpustackhttps://github.com/gpustack/gpustack 核心特性 广…

电子电气架构 --- 汽车电子拓扑架构的演进过程

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

【Elasticsearch】range aggregation

Elasticsearch 的Range Aggregation是一种强大的桶聚合&#xff08;Bucket Aggregation&#xff09;工具&#xff0c;用于将文档按照数值范围进行分组&#xff0c;从而实现对数据的分段分析。以下是关于 Range Aggregation 的详细说明&#xff1a; 1.Range Aggregation 的基本概…

AI测试工程师成长指南:以DeepSeek模型训练为例

目录 引言&#xff1a;AI测试工程师的使命与挑战成长日记&#xff1a;从测试小白到AI测试专家核心能力&#xff1a;AI测试工程师的必备素养知识体系&#xff1a;技术栈与技能图谱AI测试工具全景&#xff1a;以DeepSeek为核心的工具链实战训练模式&#xff1a;以DeepSeek模型迭…

Spring Boot整合MQTT

MQTT是基于代理的轻量级的消息发布订阅传输协议。 1、下载安装代理 进入mosquitto下载地址&#xff1a;Download | Eclipse Mosquitto&#xff0c;进行下载&#xff0c;以win版本为例 下载完成后&#xff0c;在本地文件夹找到下载的代理安装文件 使用管理员身份打开安装 安装…

Elasticsearch 开放推理 API 增加了 Azure AI Studio 支持

作者&#xff1a;来自 Elastic Mark Hoy Elasticsearch 开放推理 API 现已支持 Azure AI Studio。在此博客中了解如何将 Azure AI Studio 功能与 Elasticsearch 结合使用。 作为我们持续致力于为 Microsoft Azure 开发人员提供他们选择的工具的一部分&#xff0c;我们很高兴地宣…