考研C语言刷题基础篇之数组(一)

目录

第一题:用数组作为参数实现冒泡排序

不用函数的冒泡排序

冒泡排序原理:

错误的数值传参冒泡排序

错误的原因 

就是什么是数组名

正确的数组传参的冒泡排序 

数组的地址和数组首元素的地址的区别 


第一题:用数组作为参数实现冒泡排序

不用函数的冒泡排序

冒泡排序原理:

一共经过n-1次排序:相邻之间两两作比较。交换位置

 

 

//数组作为参数实现冒泡排序int main()
{int arr[] = { 10,9,8,7,6,5,4,3,2,1 };int sz = sizeof(arr) / sizeof(arr[0]);for(int i=0;i<sz-1;i++){for(int j=0;j<sz-1-i;j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}for(int i=0;i<sz;i++){printf("%d ", arr[i]);}return 0;}

 

错误的数值传参冒泡排序

我们将冒泡的实现封装成一个函数,这时我们发现出来,问题,打印的结果并没实现冒泡排序

//错误的数组作为参数实现冒泡排序
void bubble_sort(int arr[])
{int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz - 1; i++){for (int j = 0; j < sz - 1 - i; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
}int main()
{int arr[] = { 10,9,8,7,6,5,4,3,2,1 };bubble_sort(arr);int i = 0;for(i=0;i<10;i++){printf("%d ", arr[i]);}return 0;}

 

错误的原因 

这是因为,有一个知识点需要补充。

就是什么是数组名

什么是数组名arr

  1. 数组名其实是地址,而且是首元素的地址
  2. 但是有两个特例不是首元素的地址
    1. sizeof(arr)这里不是首元素的地址,这里是整个数组的大小
    2. &arr,对数组取地址,这里不是对首元素取地址,这里是对数组取地址
  3. 除了这两个特例以外,其他的情况都是首元素的地址
  4. 数组是数组同样其实也是指针,因此可以用数组接收,也可以用指针接收

下面我们用的数组名arr传参,这里arr是首元素的地址。 

bubble_sort(arr);

参数传给

void bubble_sort(int arr[])
//也可以用
void bubble_sort(int* arr)

 被下面的调用,但是由于arr是首元素的地址,所以sizeof(arr)求出的是首元素的大学4字节,

sizeof(arr【0】)也是首元素的地址4字节。所以这是式子的结果为1;并非实际大小10.

	int sz = sizeof(arr) / sizeof(arr[0]);

正确的数组传参的冒泡排序 

//正确的数组作为参数实现冒泡排序
void bubble_sort(int arr[],int sz)
{int i = 0;for (int i = 0; i < sz - 1; i++){for (int j = 0; j < sz - 1 - i; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
}int main()
{int arr[] = { 10,9,8,7,6,5,4,3,2,1 };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr,sz);int i = 0;for(i=0;i<10;i++){printf("%d ", arr[i]);}return 0;}

数组的地址和数组首元素的地址的区别 

虽然数组名在一些情况相当于数组首元的地址,但是这并不能代表数组的地址等于数组首元素的地址。

 下面我们可以看出,数组名和数组首元素还有数组的地址的地址是一样的

 而当我们对数组的地址和数组首元素的地址+1之后,就会发现他们并不一样。

我们发现数组名+1,和数组首元素+1,相当于地址加了4,这是应为他们加一相当于跳过了一位元素,四个字节。

而数组的地址加一,相当于整个数组10个元素都+1,那么就加了40个字节的地址。

 

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

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

相关文章

npm ERR! code CERT_HAS_EXPIRED errno CERT_HAS_EXPIRED

npm ERR! code CERT_HAS_EXPIRED 和 npm ERR! errno CERT_HAS_EXPIRED 都是指npm 在尝试连接到 npm 仓库时遇到了 SSL 证书过期的问题。这可能是由于您使用的 npm 仓库的证书已过期&#xff0c;或者您的系统时间不正确。 解决此问题的方法如下 1.关闭 npm 的 SSL 验证 通常在…

Docker网络配置与自定义IP容器通信

目录 前言 一、docker网络配置 1. bridge 虚拟网桥 2. host 网络模式 3. none 网络模式 4. 自定义container网络模式 二、自定义IP容器通信 1. 自定义IP 2. 创建所需容器&#xff08;mysql&#xff0c;tomcat&#xff09; 3. 准备项目资源 4. 构建Nginx实现负载均衡…

this指向问题以及修改函数的this指向方法

1、什么是this this表示对象 取决于函数调用&#xff08;this表示对象>当前对象>当前环境对象>函数运行时环境对象&#xff09; this就是函数运行时所在的环境对象&#xff08;取决于函数调用>不同场合&#xff0c;this有不同的值&#xff09; 函数的不同使用场…

rsync命令常用参数详解

1、语法 Usage: rsync [OPTION]… SRC [SRC]… DEST or rsync [OPTION]… SRC [SRC]… [USER]HOST:DEST or rsync [OPTION]… SRC [SRC]… [USER]HOST::DEST or rsync [OPTION]… SRC [SRC]… rsync://[USER]HOST[:PORT]/DEST or rsync [OPTION]… [USER]HOST:SRC [DEST] or r…

PyTorch深度学习实战(32)——DCGAN详解与实现

PyTorch深度学习实战&#xff08;32&#xff09;——DCGAN详解与实现 0. 前言1. 模型与数据集分析1.1 模型分析1.2 数据集介绍 2. 构建 DCGAN 生成人脸图像小结系列链接 0. 前言 DCGAN (Deep Convolutional Generative Adversarial Networks) 是基于生成对抗网络 (Convolution…

el-form动态检验无法生效问题

<el-form-item label"状态&#xff1a;"prop"zt"class"bitianxian"><el-select v-model"ruleForm.zt"placeholder"请选择"change"emptyztXM()"><el-option v-for"(item,index) in ZTdata&quo…

PWN入门Protostar靶场Stack系列

Protostar靶场地址 https://exploit.education/protostar/溢出 源码分析 #include <stdlib.h> #include <unistd.h> #include <stdio.h>int main(int argc, char **argv) {volatile int modified; //定义一个变量char buffer[64]; //给…

Git 入门精讲

我们为什么要学习git&#xff1f; 就当下的发展而言&#xff0c;只要你从事开发就一定会接触git。作为最强大的分布式版本控制器&#xff0c;git 与 svn 有着本质上的区别。 Git是一种分布式版本控制系统&#xff0c;每个开发者都可以在本地维护完整的代码库&#xff0c;可以离…

c++ 加密与解密代码(普通加密 + 凯撒加密 + 图灵来了都解不开的加密)

当你和你的好朋友聊天的时候&#xff0c;你们的聊天内容很容易就被看出来&#xff0c;那么小天狼星这边可以给到一些建议~~ 一、用另一种语言 通常来说&#xff0c;使用除中文和其他常用语言外的语言是一个优秀的选择&#xff01; 例如&#xff1a;乌伯克语、阿亚帕涅科语。 …

智能泊车,再上热搜

编者按&#xff1a;相比于行车&#xff0c;低速可控场景&#xff0c;更有利于泊车功能快速迭代。同时&#xff0c;对于部分消费者来说&#xff0c;泊车智能化也是加分项。 智能泊车赛道&#xff0c;正在重新成为各路势力争夺的焦点。而上一次“高潮”&#xff0c;要追溯到2018年…

开源客户沟通平台Chatwoot账号激活问题

安装docker docker-compose 安装git clone https://github.com/chatwoot/chatwoot 下载之后根目录有一个docker-compose.production.yaml将其复制到一个目录 重命名 docker-compose.yaml 执行docker-compose up -d 构建 构建之后所有容器都安装好了 直接访问http://ip:3…

护眼台灯怎么选——明基、书客、孩视宝实测横评

最近护眼台灯的热度真是不小&#xff0c;许多博主纷纷推荐。考虑到孩子即将放寒假&#xff0c;市场上的产品也是五花八门&#xff0c;于是我决定认真研究一下&#xff0c;找出其中的水货和宝藏产品。我挑选了市场上口碑较好的3款产品进行深入评估&#xff0c;主要从照度、显色指…

Revit二次开发 设置材质

设置此处材质&#xff0c;需要在材质浏览器中创建材质&#xff0c;根据材质名字设置此材质。 代码如下&#xff1a; Material material new FilteredElementCollector(doc).OfClass(typeof(Material)).FirstOrDefault(x > x.Name "窗框") as Material; Element…

如何利用streamlit 將 gemini pro vision 進行圖片內容介紹

如何利用streamlit 將 gemini pro vision 進行圖片內容介紹 1.安裝pip install google-generativeai 2.至 gemini pro 取 api key 3.撰寫如下文章:(方法一) import json import requests import base64 import streamlit as st 讀取圖片檔案&#xff0c;並轉換成 Base64 編…

ES6对象新增了哪些扩展?

ES6&#xff08;ECMAScript 2015&#xff09;为JavaScript中的对象引入了一些新的扩展功能。以下是一些主要的ES6对象扩展&#xff1a; 对象字面量的增强&#xff08;Object Literal Enhancements&#xff09;&#xff1a; ES6允许在对象字面量中更简洁地定义属性和方法。您可以…

Android SeekBar 进度条圆角

先看下效果图&#xff1a; 之前&#xff1a; 优化后&#xff1a; 之前的不是圆角是clip切割导致的 全代码&#xff1a; <SeekBarandroid:layout_width"188dp"android:layout_height"wrap_content"android:background"null"android:focusa…

程序员裁员潮

裁员对程序员的影响可以是相当大的&#xff0c;特别是在技术变革的时期。以下是一些可能的影响&#xff1a; 失业&#xff1a;当公司裁员时&#xff0c;程序员可能会失去他们的工作。这将导致失业风险的增加&#xff0c;特别是如果他们在特定行业或领域内专门从事工作。 就业机…

风速预测 | Python基于CEEMDAN-CNN-Transformer+ARIMA的风速时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 CEEMDAN-CNN-TransformerARIMA是一种用于风速时间序列预测的模型&#xff0c;结合了不同的技术和算法。收集风速时间序列数据&#xff0c;并确保数据的质量和完整性。这些数据通常包括风速的观测值和时间戳。CEEMDAN分…

php 面向对象与反序列

目录 1.类和对象 2.序列化 3.反序列化 1.类和对象 <?php//类 class cl {var $name "fly"; // 类属性//函数function _destruct(){echo $this->name;}//函数function eat() {echo apple;} }//对象 $a new cl(); echo $a->name.<br>; //直接调用…

使用Spring Boot实现基于HTTP的API

Spring Boot是一个用于简化Spring应用程序开发的框架&#xff0c;它提供了一系列的开箱即用的功能&#xff0c;使得快速构建RESTful Web服务和基于HTTP的API变得简单。以下是使用Spring Boot实现基于HTTP的API的步骤&#xff1a; 添加依赖&#xff1a;在Maven项目中&#xff0c…