C语言进阶课程学习记录-第29课 - 指针和数组分析(下)

news2025/2/24 12:35:59

C语言进阶课程学习记录-第29课 - 指针和数组分析(下)

    • 数组名与指针
    • 实验-数组形式转换
    • 实验-数组名与指针的差异
    • 实验-转化后数组名加一的比较
    • 实验-数组名作为函数形参
    • 小结

本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学习记录

数组名与指针

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验-数组形式转换

#include <stdio.h>

int main()
{
    int a[5] = {0};
    int* p = a;
    int i = 0;

    for(i=0; i<5; i++)
    {
        p[i] = i + 1;
    }

    for(i=0; i<5; i++)
    {
        printf("a[%d] = %d\n", i, *(a + i));
    }

    printf("\n");

    for(i=0; i<5; i++)
    {
        i[a] = i + 10;//可行 
    }

    for(i=0; i<5; i++)
    {
        printf("p[%d] = %d\n", i, p[i]);
    }

    return 0;
}

/*
output:
a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
a[4] = 5

p[0] = 10
p[1] = 11
p[2] = 12
p[3] = 13
p[4] = 14

用指针+下标代替数组赋值,可行


*/

在这里插入图片描述

实验-数组名与指针的差异

//ext.c
int a[] = {1, 2, 3, 4, 5};
#include <stdio.h>

int main()
{
   // extern int a[];//case1
    /*
        output:
        &a = 00402000 //数组地址
        a = 00402000  //首元素地址
        *a = 1
    */
    extern int *a;//case2
    
    /*
    output:
    &a = 00402000
    a = 00000001
    */

    printf("&a = %p\n", &a);//
    printf("a = %p\n", a);//1
    printf("*a = %d\n", *a);//访问地址00000001 报错


    return 0;
}

在这里插入图片描述

实验-转化后数组名加一的比较

#include <stdio.h>

int main()
{
    int a[5] = {1, 2, 3, 4, 5};
    int* p1 = (int*)(&a + 1);
    int* p2 = (int*)((int)a + 1);
    int* p3 = (int*)(a + 1);

    printf("%d, %d, %d\n", p1[-1], p2[0], p3[1]);

    return 0;
}



    /*
    output:

    小端 数据低位放在低地址中

      01 00 00  00    02 00 00  00     03 00 00  00    04 00 00  00     05 00 00  00

     5    33554432  3
    */

实验-数组名作为函数形参

#include <stdio.h>

void func1(char a[5])
{
    printf("In func1: sizeof(a) = %d\n", sizeof(a));

    *a = 'a';

    a = NULL;
}

void func2(char b[])
{
    printf("In func2: sizeof(b) = %d\n", sizeof(b));

    *b = 'b';

    b = NULL;
}

int main()
{
    char array[10] = {0};

    func1(array);

    printf("array[0] = %c\n", array[0]);

    func2(array);

    printf("array[0] = %c\n", array[0]);

    return 0;
}

    /*
    output:
In func1: sizeof(a) = 4
array[0] = a
In func2: sizeof(b) = 4
array[0] = b
数组名作为函数形参会退化为指针
    */

小结

数组名与指针仅使用方式相同
数组名的本质不是指针;指针的本质不是数组
数组名并不是数组的地址,而是数组首元素的地址
函数的数组参数退化为指针

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

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

相关文章

Docker 安装MySql并操作日志

一、在Linux系统里新建这几个文件夹 1.1 在conf.d文件夹下新建一个my.cnf文件 1.2 用vscode 打开&#xff08;防止乱码&#xff09;&#xff0c;复制以下内容 [mysqld] log_timestampsSYSTEM default-time-zone8:00server-id1log-binmysql-binbinlog-do-db mall # 要监听的库…

python使用uiautomator2操作雷电模拟器9找图(二)

昨天写过一篇文章 python使用uiautomator2操作雷电模拟器9找图&#xff08;一&#xff09;-CSDN博客 今天在实际中有遇到了新的问题&#xff1a;一幅主图中&#xff0c;可能存在多个相同的子图&#xff0c;想要找到所有的子图&#xff0c;并操作。比如&#xff1a; 主图&…

头歌-机器学习 第1次实验 Python机器学习软件包Scikit-Learn的学习与运用

第1关&#xff1a;使用scikit-learn导入数据集 scikit-learn包括一些标准数据集&#xff0c;不需要从外部下载&#xff0c;可直接导入使用&#xff0c;比如与分类问题相关的Iris数据集和digits手写图像数据集&#xff0c;与回归问题相关的波士顿房价数据集。 以下列举一些简单…

计算机网络-浏览器解析到URL对应的IP地址的时间

声明&#xff1a;原文转载链接出自&#xff1a; 哈工大Mooc——计算机网络&#xff1a;作业3 假设你在浏览某网页时点击了一个超链接&#xff0c;URL为“https://www.kicker.com.cn/index.html”&#xff0c;且该URL对应的IP地址在你的计算机上没有缓存&#xff1b;文件index…

OCR常用识别算法综述

参考&#xff1a;https://aistudio.baidu.com/education/lessonvideo/3279888 语种&#xff1a;常用字符36与常用汉字6623&#xff0c;区别。 标注&#xff1a;文本型位置/单字符位置&#xff0c;后者标注成本大 挑战&#xff1a;场景文字识别&#xff1a;字符大小、颜色、字体…

智能网络新纪元:机器学习赋能未来计算机网络高速发展

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

2024-04-11最新dubbo+zookeeper下载安装,DEMO展示

dubbozookeeper下载安装 下载zookeeper&#xff1a; 下载地址 解压&#xff0c;并进入bin目录&#xff0c;启动 如果闪退可以编辑脚本&#xff0c;在指定位置加上暂停脚本 报错内容说没有conf/zoo.cfg&#xff0c;就复制zoo_sample.cfg重命名为zoo.cfg 再次启动脚本&#x…

CentOS部署Apache Superset大数据可视化BI分析工具并实现无公网IP远程访问

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

GPT中的Transformer架构以及Transformer 中的注意力机制

目录 1 GPT中的Transformer架构 2 transformer中的注意力机制 参考文献&#xff1a; 看了两个比较好的视频&#xff0c;简单做了下笔记。 1 GPT中的Transformer架构 GPT是Generative Pre-trained Transformer单词的缩写&#xff0c;其中transformer是一种特定的神经网络&a…

关于无人机,你必须知道的事!!(科技篇)

飞行器的五脏六腑 电机&#xff1a;无人机的动力单元&#xff0c;俗称“马达”。通过电机转动来驱动螺旋桨旋转&#xff0c;最终让飞机上天。 电调&#xff1a;无人机的动力单元&#xff0c;是接收油门信号并调整电机转速的控制枢纽&#xff0c;俗称电机的“黑屋调教师” 飞…

Sa-token基本使用教程(全网最详细!!!)

1.概述 1.1 Sa-Token介绍 功能简单示例 1.2 Sa-Token 功能一览 2. 使用 2.1 导入依赖 2.2 springBoot的简单集成 2.2.1 配置文件 2.2.2 controller 2.2.3 简单登录页面 2.3 功能详解 2.3.1 登录认证 2.3.1.1 登录与注销 NotLoginException 登录分析 先校验账号和…

俄语人挂在嘴边的“что”,并不一定翻译成“什么”!柯桥日常俄语学习外语学校

“что”作为我们接触俄语之后学习的第一个单词&#xff0c;其含义相信大家都知道&#xff1a;大多数时候译为“什么”。 但其实千万不要小瞧这一个小小的“что”&#xff0c;今天我们就来好好剖析学习一下我们的老朋友“что”~ 首先我们来看看“что”在地道口语中常…

ESXI 中安装 虚拟机 麒麟v10 操作系统

浏览器访问登录ESXI 上传镜像文件 创建新虚拟机 选择虚拟机名称和操作系统 选择存储 配置虚拟机 配置虚拟机 cpu 内存 硬盘 并选择虚拟机驱动 配置完成后&#xff0c;点击下一步&#xff0c;并点击完成。 开机 完成后选择该虚拟机&#xff0c;并打开电源 等待出现以下界面…

统一处理异常和记录日志

统一处理异常 SpringBoot设计&#xff0c;如果出现错误404或500&#xff0c;自动调用特定路径下的html页面(路径和名字都特定)。/templates/error/404.html、/templates/error/500.html。程序中有错误自动就调用该页面。 但是错误有异步请求错误&#xff0c;也想同时记录日志。…

Threejs实现闪电效果

这是一次比较失败的功能实现&#xff0c;本来想网上很少有threejs实现闪电效果的&#xff0c;但是我觉得好像可以做出来&#xff0c;就尝试着做了&#xff0c;结果做出来的太丑了&#xff0c;但是不能时间白费&#xff0c;所以记录下&#xff0c;总得有个交代。 首先还是搭建出…

14-pyspark的DataFrame使用总结

目录 前言DataFrame使用总结 DataFrame的构建方法1&#xff1a;通过列表构建方法2&#xff1a;通过Row对象构建方法3&#xff1a;通过表Schema构建 方法4&#xff1a;rdd结合字符串构建 DataFrame的方法 PySpark实战笔记系列第五篇 10-用PySpark建立第一个Spark RDD(PySpark实战…

DSP笔记-7时钟和系统控制

外部时钟源-晶振 无源晶振&#xff0c;有源晶振&#xff0c; 频率&#xff1a;20MHz&#xff0c;12.5MHz&#xff0c;30MHz&#xff0c;50MHz&#xff0c;32.768MHz SPI&#xff0c;SCI&#xff0c; I2C串行通信 eCAP捕获功能&#xff0c;eQEP解码&#xff0c;ePWM脉冲宽度…

SAP SD学习笔记03 - SD模块中的主数据

上一章讲了SD中的组织单位和SD的简单流程。 SAP SD学习笔记02 - 销售流程中的组织单位-CSDN博客 SAP SD学习笔记01 - 简单走一遍SD的流程&#xff1a;受注&#xff0c;出荷&#xff0c;请求-CSDN博客 这一章讲SD中的主数据&#xff1a; - 得意先Master&#xff08;客户&…

Java设计模式之创建型模式(二)原型模式

原型模式 1、原型模式1-1、应用场景1-2、举个 软栗子1-3、举个 硬栗子1-4、举个实务栗子1-5、代码重构 学习原型模式的目的&#xff1a;原型模式的目的在于通过复制现有的实例来创建新的对象&#xff0c;以避免通过构造函数创建对象时可能带来的性能开销&#xff0c;同时可以控…

实验9 内置对象application

一、实验目的 掌握怎样在JSP中使用内置对象application 二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握application的用法。【参考课本例题4-16 留言板 】 三、源代码以及执行结果截图&#xff1a; example4_16.jsp <% page language"…