C语言——数组&常用关键字

目录

数组中数据的初始化

数组中元素的访问

函数参数的传递

关键字:typedef&#define

typedef  类型定义

#define  宏定义

 typedef 和 #define的区别

static 静态修饰

static修饰局部变量

static修饰全局变量

static修饰函数


数组:一组相同类型数据的集合。

例如: int  arr[n];其中n必须是常量,但有一种情况例外——宏定义,如下所示。

#define MY_NUM 10

int arr[MY_NUM];

数组中数据的初始化

int arr[10]={1,2,3,4,5,6,7,8,9,10};数组中的元素用花括号括起来,以逗号间隔每个数据,花括号外以分号结束。

int arr[1000]={1};数组中的第0个元素是1,其余元素均以0填充。

int arr[100]={0};将数组中的元素全部初始化为0。

数组中元素的访问

数组中的元素是通过下标来访问,数组的遍历只能通过循环逐个访问,不能整体访问。

#include
#include
#define MY_NUM 10
int main()
{
	int arr[MY_NUM];
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		arr[i] = i + 1;
		printf("数组的第%d个元素是%d\n", i, arr[i]);
	}
	system("pause");
	return 0;
}

C语言——数组&常用关键字_第1张图片

注意:数组的元素访问是从0下标开始的,10个元素的下标依次为0-9。如果访问了arr[10],则为越界访问,访问到了不属于arr数组的空间会导致程序运行崩溃。

函数参数的传递

#include
#include
//int arr[]说明要传递进来的是个数组
void init_arr(int arr[], int sz)//该函数用于对数组的元素进行初始化
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		arr[i] = i + 1;
	}
}
int main()
{
	int arr[10];
	int i;
	init_arr(arr,sizeof(arr)/sizeof(arr[0]));//调用函数
	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		printf("数组的第%d个元素是%d\n", i, arr[i]);
	}
	system("pause");
	return 0;
}

sizeof(arr)求数组所占的空间大小,sizeof(arr[0])求数组首元素所占的空间大小。

sizeof(arr)/sizeof(arr[0])即数组的元素个数。

关键字:typedef&#define

typedef  类型定义

typedef unsigned int uint  使用unsigned int定义了一个新的类型 uint

uint a;  等价于 unsigned int a;

#define  宏定义

作用:进行替换。宏定义后面不能有分号,否则分号也是宏定义的一部分。

#include
#include

#define MAX(a,b) (a>b)?(a):(b)
int main()
{
	int ret = MAX(10, 20);
	printf("%d\n",ret);

	system("pause");
	return 0;
}

“宏函数”针对一些魔幻数字,使用宏赋予数字一些含义,提高代码的可读性,宏函数并不是真正的函数,因此没有函数的调用消耗。

 typedef 和 #define的区别

#define只是一种替换,而 typedef是定义一个类型。

#define INT int*

INT a,b;    等价于  int* a;int b;

typedef int* PINT

PINT a,b;  等价于  int* a;int*b;

static 静态修饰

static修饰局部变量

改变了局部变量的生命周期,使局部变量的生命周期随程序的结束被释放。

#include
#include
int return_num()
{
	int n = 10;
	n += 10;
	return n;
}
int main()
{
	int i;
	for (i = 0; i < 5; i++)
	{
		int ret=return_num();//每次调用函数后a重新赋值为10
		printf("%d\n",ret);
	}
	system("pause");
	return 0;
}

运行结果:20 20 20 20 20

#include
#include
int return_num()
{
//用static修饰局部变量后,局部变量的作用域为整个程序,因此不会在下一次调用时被释放
	static int n = 10;
	n += 10;
	return n;
}
int main()
{
	int i;
	for (i = 0; i < 5; i++)
	{
		int ret=return_num();
		printf("%d\n",ret);
	}
	system("pause");
	return 0;
}

运行结果:20 30 40 50 60

改变了生命周期后,变量只会被初始化一次(只需要开辟一次空间), 随着作用域的结束空间不会被释放

static修饰全局变量

修改变量的访问属性(作用域)。

让这个全局变量仅在自己的作用域内生效,并且根据就近原则,所属文件内访问重名的时候优先访问自己文件内的。

C语言——数组&常用关键字_第2张图片

C语言——数组&常用关键字_第3张图片

因此:如果想要一个变量仅在所属.c文件内被使用,尽量使用static修饰;

           如果要在整个工程内使用这个变量,就不要使用static修饰。

static修饰函数

作用与修饰全局变量差不多(修改函数的访问属性,避免与外部其它函数命名冲突)

只要是同一个作用域,就不能使用同名的变量或者函数,无论是否使用static修饰。

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