C 数组 函数

目录

一、数组

1、一维数组

2、二维数组 

3、数组的有趣玩法

二、函数

1、库函数

2、自定义函数 

3、static 和 extern


一、数组

1、一维数组

(1)数组的类型

数组算是一种自定义类型,去掉数组名留下的就是数组的类型。

int arr1[10]    //arr1 数组的类型是 int[10]

char arr2[5]    //arr2 数组的类型是 char[5]

(2)sizeof计算数组元素个数

sizeof 是一个关键字,可以计算类型或者变量大小的,其实也可以计算数组的大小。计算的是数组所占内存空间的总大小,单位是字节。

//VS2022 x64
#include<stdio.h>
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	printf("%d\n", sizeof(arr[0]));		//输出 4 ,因为数组元素是 int类型
	
	printf("%d\n", sizeof(arr));		//输出 20,因为数组里有5个int类型的元素
	
	int sz = sizeof(arr) / sizeof(arr[0]);
	printf("%d\n", sz);		//输出 5,该数组有5个元素
	return 0;
}

2、二维数组 

(1)二维数组初始化时能省略行,但不能省略列;

(2)C99中给一个变长数组(variable-length array,简称 VLA)的新特性,允许我们可以使用变量指定数组大小,但在VS2022上不支持变长数组。


3、数组的有趣玩法

多个字符从两端移动,向中间汇聚

#include<stdio.h>
#include<windows.h>		//使用Sleep()和system()需要加的头文件
int main()
{
	char arr1[] = "hello_world!!!";
	char arr2[] = "**************";
	int sz = sizeof(arr1) / sizeof(arr1[0]);	//计算出的长度是16,
												//因为字符串尾部会系统添加一个\0
	int right = sz - 1 - 1;		//第一个减一是减去字符\0;
								//第二个减一是因为数组的下标从0开始
	int left = 0;
	while(left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		system("cls");		//系统命令,控制台清屏
		printf("%s", arr2);
		Sleep(1000);		//休眠1000ms
		left++;
		right--;
	}
	return 0;
}

二、函数

1、库函数

库函数的学习和查看工具很多,比如:

C/C++官方的链接:https://zh.cppreference.com/w/c/header

cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/


2、自定义函数 

(1)数组传参的几个重点知识:

  • 函数的形式参数要和函数的实参个数匹配
  • 函数的实参是数组,形参也是可以写成数组形式的
  • 形参如果是一维数组,数组大小可以省略不写
  • 形参如果是二维数组,行可以省略,但是列不能省略
  • 数组传参,形参是不会创建新的数组的
  • 形参操作的数组和实参的数组是同一个数组

(2)嵌套调用 就是函数之间的互相调用。

(3)链式访问 就是将一个函数的返回值作为另外一个函数的参数。

(4)printf 函数返回的是打印在屏幕上的字符的个数。

//VS2022 x64
#include<stdio.h>
int main()
{
	printf("%d", printf("%d", printf("%d", 33)));	//输出3321
	return 0;
}

第三个 printf 打印33,在屏幕上打印2个数字,再返回 2 ;

第二个 printf 打印 2 ,在屏幕上打印1个数字,再放回 1 ;

第一个 printf 打印 1 ,结束。

(5)函数的调用一定要满足,先声明后使用;

  • 函数的定义也是一种特殊的声明,所以如果函数定义放在调用之前也是可以的。

(6)在代码量很大的情况下,一般是

  • 函数的声明、类型的声明放在头文件(.h)中,
  • 函数的实现是放在源文件(.c)文件中。

3、static 和 extern

(1)staticextern 都是C语言中的关键字。

(2)extern 是用来声明外部符号的。 

如果一个全局的符号在 A文件 中定义的,在 B文件 中就可以使用 extern 进行声明,然后使用。

(5)static 的用处:

  •   修饰局部变量,会改变局部变量的生命周期,只有程序结束,变量才销毁,内存才回收。但是作用域不变。
  •   修饰全局变量,被 static 修饰,这个全局变量只能在本文件内使用,不能在其他文件内使用。
  •   修饰函数,与修饰全局变量一样。

(3)作用域

  • 局部变量的作用域是变量所在的局部范围。
  • 全局变量的作用域是整个工程(项目)。

(4)生命周期

  • 局部变量的生命周期是:进入作用域变量创建,生命周期开始,出作用域生命周期结束。
  • 全局变量的生命周期是:整个程序的生命周期。 

(6)变量在内存中的存储


完 

  • 32
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在C语言中,可以通过编写一个数组去重函数来实现对数组中重复元素的去除。以下是一个示例的数组去重函数调用的介绍: 假设我们有一个整型数组`arr`,长度为`n`,我们想要对该数组进行去重操作。可以按照以下步骤进行: 1. 定义一个新的数组`result`,用于存储去重后的元素。 2. 遍历原始数组`arr`,逐个检查每个元素是否已经存在于`result`数组中。 3. 如果当前元素不存在于`result`数组中,则将其添加到`result`数组中。 4. 最后,`result`数组中存储的就是去重后的元素。 下面是一个示例的C语言代码,展示了如何调用一个数组去重函数: ```c #include <stdio.h> // 数组去重函数 int* removeDuplicates(int* arr, int n, int* resultSize) { int* result = (int*)malloc(n * sizeof(int)); // 分配内存空间 int count = 0; // 记录去重后的元素个数 for (int i = 0; i < n; i++) { int j; for (j = 0; j < count; j++) { if (arr[i] == result[j]) { break; // 当前元素已存在于result数组中,跳出内层循环 } } if (j == count) { result[count++] = arr[i]; // 当前元素不存在于result数组中,添加到result数组中 } } *resultSize = count; // 更新去重后的元素个数 return result; } int main() { int arr[] = {1, 2, 3, 2, 4, 1, 5}; int n = sizeof(arr) / sizeof(arr[0]); int resultSize; int* result = removeDuplicates(arr, n, &resultSize); printf("去重后的数组:"); for (int i = 0; i < resultSize; i++) { printf("%d ", result[i]); } free(result); // 释放内存空间 return 0; } ``` 运行上述代码,输出结果为: ``` 去重后的数组:1 2 3 4 5 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值