C语言数组、标识符

目录

(一)数组做函数参数

1.一维整型数组 做函数参数

 2.一维字符型数组 做函数参数

3.二维整型数组 做函数参数

4.二维字符型数组 做函数参数

(二)标识符的作用域与可见性问题

1.作用域:名字作用的范围

2.可见性 

3.存储类别的关键字

(三)部分代码总结

1.实现puts()功能的函数

2.实现gets()功能的函数

3.实现strlen()功能的函数

4.实现strcpy()功能的函数

5.实现strcat()功能的函数

6.实现strcmp()功能的函数


(一)数组做函数参数

1.一维整型数组 做函数参数

   形参 --- 数组形式 + 数组长度 
   实参 --- 数组名   + 数组长度  

 2.一维字符型数组 做函数参数

   形参 --- 数组形式  
   实参 --- 数组名   

   原因: 一维字符型数组主要用来存储字符串数据 ,字符串操作的依据主要看结束标志 '\0'
而不是数组长度。

3.二维整型数组 做函数参数

   形参 --- 数组形式 + 行数 (行数---本质上就是一维数组的长度 )
   实参 --- 数组名   + 行数 

4.二维字符型数组 做函数参数

   形参 --- 数组形式 + 行数 //本质 就是一维数组的长度 
   实参 --- 数组名   + 行数   

注意:                                                                                                                                          (1)不要和一维字符型数组传参搞混 :
        一维字符型数组,主要用来存放字符串数据,而字符串数据有结束标志('\0'),所以传参时,不需要传长度。
(2)二维字符型数组,用来存储多个字符串:
      二维字符型数组要操作时,往往都是操作多个字符串,而多个字符串没有所谓结束的标志,主要看的是数组长度(行数)。

(二)标识符的作用域与可见性问题

1.作用域:名字作用的范围

(1)局部作用域:

{

        //花括号范围内的就叫局部作用域 

}

(2)全局作用域 :不在任何一个 {} 范围之内的

(3) 在局部作用域中定义的变量 --- 局部变量 

①特点:局部变量的空间一般都开在栈上 ,如果不初始化,局部变量中的值是随机值(垃圾值)。

②生命周期:从程序运行到定义处开始存在,到程序运行到它作用范围结束时销毁。

(4)在全局作用域中定义的变量 --- 全局变量 

①特点:全局变量的空间一般都开在全局区上 ,如果不初始化,全局变量中的值默认初始化为0。

②生命周期:从程序开始运行时就存在了,直到整个程序运行结束时销毁。

注意:全局变量和静态变量,不能用"变量"进行初始化。

2.可见性 

标识符的可见性的规则:
①先定义,后使用 。
②同一作用域中,不能有同名标识符。
③在不同的作用域,同名标识符相互之间没有影响 。
⑤如果是不同的作用域,但是作用域之间存在嵌套关系,则内层的作用域的同名标识符,会屏蔽外层的作用域的同名标识符。(就近原则) 

3.存储类别的关键字

(1)auto:表示它是一个自动变量 (局部变量)  --- 空间自动申请,自动释放 。

(2)static:修饰局部变量时,变量会被放在全局区(静态区),此时局部变量的生命周期被延长。         注意:①static 修饰局部变量时只会被初始化一次 ;②static 修饰的变量具有继承性;③static 修饰的变量只能用常量初始化 (不能用变量初始化) ④static 修饰全局变量时,表示变量限定作用域为本文件,别的文件不能通过extern来声明使用;⑤static 修饰函数时,表示函数限定作用域为本文件,别的文件不能通过extern来声明使用。

(3)register:表示把变量存储寄存器中。(register 修饰的变量不能做取地址运算)

(4)extern:表示变量是存在外部的,不在当前文件中。(只能声明全局变量 ) 

(三)部分代码总结

1.实现puts()功能的函数
void Puts(char s[])
{
	int i = 0;
	while(s[i] != '\0')
	{
		printf("%c",s[i]);
		++i;
	}
	putchar('\n');
}
2.实现gets()功能的函数
void Gets(char s[])
{
	int i=0;
	while((s[i]=getchar()) != '\n')
	{
		i++;
	}
	s[i] = '\0';
}

3.实现strlen()功能的函数
int Strlen (char s[])
{
	int i=0;
	int count=0;
	while(s[i]!='\0')
	{
		i++;
		count++;
	}
	return count;
}
4.实现strcpy()功能的函数
void Strcpy(char dest[], char src[])
{
	int i=0;
	while(src[i] != '\0')
	{
		dest[i] = src[i];
		i++;
	}
	dest[i] = '\0';
}
5.实现strcat()功能的函数
void Strcat(char dest[],char src[])
{
	int i;
	int j=0;
	while(dest[i]=='\0')
		i++;
	while(src[j]!='\0')
	{
			dest[i]=src[j];
			i++;
			j++;
	}

	dest[i]='\0';
}
6.实现strcmp()功能的函数
int Strcmp(char s1[], char s2[])
{
	int i=0;
	while(s1[i]==s2[i] && s1[i]!='\0' && s2[i]!='\0')
	{
		i++;
	}

	return s1[i]-s2[i];
}

 
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值