【C/C++基础]——数组,一维数组,二维数组,冒泡排序

目录

数组:有序排列的同类数据元素的集合称为数组(array)

一)一维数组的初始化:

1、数组元素的个数和数组输出:

1.1 辨析strlen和sizeof

2、数组元素的存储 :​编辑

(二)二维数组: 

1、数组传参:冒泡排序


数组:有序排列的同类数据元素的集合称为数组(array)

数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。

 一维数组的初始化:

    char arr1[] = { 'a','b','c' };     //a b c       //这个方法初始化了三个字符[3]
    char arr2[] = { 'a',98,'c' };    //98=b ,  arr2=arr1
    char arr3[] = "abc";             //a b c \0    //这个方法初始化了四个字符[4]
    char arr4[5] = { 'a','b','c' };   //a b c     系统填两个\0
    char arr5[5] = "abc";           //a b c \0  系统填一个\0

 数组元素的个数和数组输出:

  数组元素下标从0开始,[ ] 叫下标引用操作符,arr[2]找到的是数组的第三个元素

   计算元素个数:int sz = sizeof(arr1) / sizeof(arr1[0]);
    for (int i = 0; i < sz; i++)  //如果<=上面五个数组的输出都是abc?
    {
        cout << arr1[i];      //输出abc
    } 

 辨析strlen和sizeof

  • strlen函数遇到\0就会停止下来,计算\0前面的元素个数
  • sizeof不能计算动态分配空间的大小
  • char * s = "0123456789";

  • sizeof(s);     //结果 4          s是指向字符串常量的字符指针

  • sizeof(*s);    //结果 1         *s是第一个字符
    strlen(s);     //结果 10        有10个字符,strlen是个函数内部实现是 用一个循环计算到\0为止之前
    strlen(*s);     //结果 10      错误

  • char s[] = "0123456789";
    sizeof(s);     //结果 11         s是数组,计算到\0位置,因此是10+1
    strlen(s);     //结果 10         有10个字符,strlen是个函数内部实现是用一个循环计算到\0为止之前
    sizeof(*s);    //结果 1          *s是第一个字符

  • char s[100] = "0123456789";

    sizeof(s);     //结果是100    s表示在内存中的大小 100×1
    strlen(s);     //结果是10       strlen是个函数内部实现是用一个循环计算到\0为止之前

  • int s[100] = "0123456789";

    sizeof(s);     //结果 400      s表示再内存中的大小 100×4
    strlen(s);     //错误              strlen的参数只能是char* 且必须是以‘\0‘结尾的

  • char q[]="abc";

    char p[]="a\n";
    sizeof(q),sizeof(p),strlen(q),strlen(p);\\结果是 4 3 3 2

  • char p[] = {'a','b','c','d','e','f','g','h'};

    sizeof(p);     //结果是8        p表示在内存中的大小 8×1
    strlen(p);     //为一个随机值,结果与编译器有关,不同编译器结果一般不同

  • char q[] = {'a','b','c','d,'\0','e','f','g'};
    sizeof(q);     //结果是8        p表示在内存中的大小 8×1
    strlen(q);     //结果为4        存在'\0',遇到'\0'计算停止。

    ————————————————
    版权声明:本文为CSDN博主「Oragen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/magic_world_wow/article/details/80500473

数组元素的存储 :

一维数组在内存中连续存放,随着数组下标的增长,地址是由低到高变化的

 全局变量和静态变量在未初始化的时候默认值=0


注意指针打印数组是+1

 

 

二维数组: 

可以省略行,不可以省略列

 第一行最后一个元素地址和第二行第一个元素地址差4,在内存中连续存放


数组名=数组首元素地址

有2个例外下数组名表示整个数组:
1  sizeof(数组名),数组名不是数组首元素的地址,数组名表示整个数组,计算的是整个数组的大小
2  &数组名,数组名不是数组首元素的地址,数组名表示整个数组,取出的是整个数组的地址 

 第三个是数组名+1,加的是整个数组的地址

 

数组传参:冒泡排序

 

 十个元素进行九次冒泡排序,剩下的一个元素必定在应该在的位置。

每一趟内部都是两个相邻元素比较,第一趟十个元素比较九对,第二趟九个元素比较八对。

 
#include<iostream>
using namespace std;
//*******************冒泡排序**********************
//void bubble_sort(int arr[],int sz) //数组传参,数组接受
void bubble_sort(int *arr, int sz)   //两种写法
{
	int i = 0;
	for (i = 0; i < sz - 1; i++)       //趟数
	{
		int flag = 1;             //假设已经有序了
		int  j = 0;                    //拿出来定义,不然if里面会报错
		for (j = 0; j < sz- 1 -i ; j++)
		if (arr[j] > arr[j + 1])      //交换
		{
			flag = 0;            //如果第一趟不是有序的,那么flog=0
			int temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
		if (flag == 1)//如果第一堂出来flag还是等一1那么说明已经有序
		{
			break;//不用再排序了,直接推出排序循环
		}
	}
	//排序完成后输出排序后的数组:
	for (int k = 0; k < sz; k++)
	{
		cout << arr[k]<<" ";
	}
}

写在最后:

博主大一学识尚浅,内容仅供参考,欢迎大家在评论区和我交流分享!

以后会经常发有趣的小游戏,和学习心得,感兴趣的小伙伴可以点个关注支持一下

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值