c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
【9】c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
【10】c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句
【11】c/c++:for循环语句,分号不可省略,表达式可以省略,猜数字游戏,跳转语句continue,break,避免写goto


文章目录

  • c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法
    • @[TOC](文章目录)
  • c/c++:数组
  • 数组逆序
  • 总结

c/c++:数组

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第1张图片
简单定义数组:
相同数据类型的有序集合

void f37(void)
{
	int a = 10;
	int b = 10;
	int c = 10;//这三这么申明是无序的哦


}

你要是单独申请,反正是不挨着的,没有序

如果你想把这几个数据放一堆,那就需要定义数组

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第2张图片

#include
#include
#include
#include
#include
#include

void f37(void)
{
	//int a = 10;
	//int b = 10;
	//int c = 10;//这三这么申明是无序的哦

	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//这十个就是连续紧挨着存的
	for (int i = 0; i < 10; i++)
	{
		printf("%x\n", &arr[i]);//挨个打印数组的地址
	}

}


int main(void)
{
	f37();

	system("pause");
	return 0;
}

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第3张图片
看见没,他们的地址都是连续递增4字节的,int占4字节,懂?

#include
#include
#include
#include
#include
#include

void f37(void)
{
	int a = 10;
	int b = 10;
	int c = 10;//这三这么申明是无序的哦

	printf("%x\n", &a);
	printf("%x\n", &b);
	printf("%x\n", &c);

	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//这十个就是连续紧挨着存的
	for (int i = 0; i < 10; i++)
	{
		printf("%x\n", &arr[i]);//挨个打印数组的地址
	}

}


int main(void)
{
	f37();

	system("pause");
	return 0;
}

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第4张图片
abc就没有连续哦

数组名就是数组的首地址
它就是指针,你都不用&取地址符号。

void f37(void)
{
	//int a = 10;
	//int b = 10;
	//int c = 10;//这三这么申明是无序的哦

	//printf("%x\n", &a);
	//printf("%x\n", &b);
	//printf("%x\n", &c);

	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//这十个就是连续紧挨着存的
	
	printf("%x\n", &arr);//数组名本身就是地址
	for (int i = 0; i < 10; i++)
	{
		printf("%x\n", &arr[i]);//挨个打印数组的地址
	}

}

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第5张图片

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//这十个就是连续紧挨着存的
	
	printf("%x\n", &arr);//数组名本身就是地址
	printf("%x\n", arr);//数组名本身就是地址
	for (int i = 0; i < 10; i++)
	{
		printf("%x\n", &arr[i]);//挨个打印数组的地址
	}

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第6张图片

数组元素的个数怎么求?

数组的大小是sizeof(arr)
然后除某个元素的大小sizeof(arr[0])

所以整个数组有多少个元素?sizeof(arr)/sizeof(arr[0])


void f38(void)
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//这十个就是连续紧挨着存的
	printf("数组整个大小%d:\n", sizeof(arr));
	printf("arr[0]大小%d:\n", sizeof(arr[0]));
	printf("arr有几个?%d:\n", sizeof(arr)/sizeof(arr[0]));

}

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第7张图片


void f38(void)
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//这十个就是连续紧挨着存的
	printf("数组整个大小%d:\n", sizeof(arr));
	printf("arr[0]大小%d:\n", sizeof(arr[0]));
	printf("arr有几个?%d:\n", sizeof(arr)/sizeof(arr[0]));
	int n = sizeof(arr) / sizeof(arr[0]);//数组个数
	for (int i = 0; i < n; i++)
	{
		printf("%x\n", arr[i]);//挨个打印数组
	}
}


int main(void)
{
	f38();

	system("pause");
	return 0;
}

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第8张图片
有了个数n才能好办
java中
直接arr.length就好办了
c++应该也行,因为他们都是面向对象的编程

[]中不定义个数没关系,操作系统自动会给你计算的
c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第9张图片
注意那个全都是0的数组


void f38(void)
{
	//int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//这十个就是连续紧挨着存的
	int arr[10] = { 0 };//这十个就是连续紧挨着存的
	printf("数组整个大小%d:\n", sizeof(arr));
	printf("arr[0]大小%d:\n", sizeof(arr[0]));
	printf("arr有几个?%d:\n", sizeof(arr)/sizeof(arr[0]));
	int n = sizeof(arr) / sizeof(arr[0]);//数组个数
	for (int i = 0; i < n; i++)
	{
		printf("%x\n", arr[i]);//挨个打印数组
	}
}

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第10张图片
如果中间的长度不指定
系统自动分配长度为1
就是1个0


void f38(void)
{
	//int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//这十个就是连续紧挨着存的
	int arr[] = { 0 };//这十个就是连续紧挨着存的
	printf("数组整个大小%d:\n", sizeof(arr));
	printf("arr[0]大小%d:\n", sizeof(arr[0]));
	printf("arr有几个?%d:\n", sizeof(arr)/sizeof(arr[0]));
	int n = sizeof(arr) / sizeof(arr[0]);//数组个数
	for (int i = 0; i < n; i++)
	{
		printf("%x\n", arr[i]);//挨个打印数组
	}
}

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第11张图片


void f38(void)
{
	//int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//这十个就是连续紧挨着存的
	//int arr[10] = { 0 };//这十个就是连续紧挨着存的
	//int arr[] = {  };//这十个就是连续紧挨着存的
	int arr[10];
	arr[0] = 1;//那其他的呢?
	printf("数组整个大小%d:\n", sizeof(arr));
	printf("arr[0]大小%d:\n", sizeof(arr[0]));
	printf("arr有几个?%d:\n", sizeof(arr)/sizeof(arr[0]));
	int n = sizeof(arr) / sizeof(arr[0]);//数组个数
	for (int i = 0; i < n; i++)
	{
		printf("%x\n", arr[i]);//挨个打印数组
	}
}

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第12张图片
其他的没有初始化,随机的

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第13张图片

数组逆序

这算法中超级简单的弱智代码了
不就是交换吗
swap
c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第14张图片

整个临时空间tmp,把0位置放过去,然后把0位置跟N-1位置交换

然后把tmp放入N-1位置
这不就完成了两头交换
然后同时往中间推进,继续交就行。


void f39(void)
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//这十个就是连续紧挨着存的
	int n = sizeof(arr) / sizeof(arr[0]);//数组个数
	for (int i = 0; i < n; i++)
	{
		printf("%d\n", arr[i]);//挨个打印数组
	}

	printf("交换之后\n");//挨个打印数组
	//逆序
	for (int i=0,j = n - 1; i <= n / 2; i++, j--)
	{
		//只需要逆转一半
		int tmp = arr[i];
		arr[i] = arr[j];
		arr[j] = tmp;//交换
	}
	//再整体打印
	for (int i = 0; i < n; i++)
	{
		printf("%d\n", arr[i]);//挨个打印数组
	}
}

int main(void)
{
	f39();

	system("pause");
	return 0;
}

c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法_第15张图片


总结

提示:重要经验:

1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

你可能感兴趣的:(c++,c++,c语言,算法,数组,数组逆序)