很多人在学习C语言或者其他编程语言时,对指针的理解不是很透彻,导致在学习数据结构时,见到需要使用指针的相关算法时会有读不懂的情况,读不懂自然写不出来。本文从基础出发,以数组引入指针,逐步讲解指针以及结构体的概念与使用。如果读者能够认真地读完本文,再去阅读一些较为复杂的C语言代码会很容易。
|数组概述
数组是构造数据类型之一;是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素;数组中各元素的数据类型要求相同,用数组名和下标确定。数组可以是一维的,也可以是多维的。
所谓一维数组是指只有一个下标的数组。它在计算机的内存中是连续存储的。在C语言中,一维数组的一般说明形式为:<存储类型> <数据类型> <数组名>[<表达式>]
数组名表示内存首地址,是地址常量。因此在编程中,数组名不可以修改,一旦修改,会造成数据存储位置发生变化,程序会发生重大错误。
数组名是地址常量,但是数组中的每一项都是变量,可以被赋予不同的值。
使用函数sizeof(数组名)可以得到数组占用的总内存空间,一维数组编译时分配连续内存,内存字节数=数组维数* sizeof(元素数据类型)。
C语言中不对数组进行越界检查,使用时要注意下标(从0开始,int a[5]表示a[0]-a[4]可以使用),数组定义长度是可以用变量,如int i=15;int a[i];
一维数组初始化,在定义数组时就可以为数组元素赋值,如int a[5]={1,2,3,4,5},初始化有两个原则:若在定义时不赋初值,其元素值为随机数;对static数组元素不赋初值,系统会自动赋以0值;
二维数组的一般说明形式为:<数据类型> <数组名>[常量表达式(行)] [常量表达式(列)],在声明时列数不能省略,行数可以,元素个数=行数*列数
二维数组的初始化包括分行初始化和按元素排列顺序初始化,具体包括如下情况:
具有两个或两个以上下标的数组称为多维数组,具体的使用方法与二位相似,可参考使用。
|字符数组和字符串
字符数组是元素的数据类型为字符类型的数组,如char c[20],ch[3][4],字符数组在初始化时常用的方法为逐个字符赋值和字符串常量(如“abc”中包含的字符为‘a’,'b','c',''),具体如下:
二维字符数组初始化具体如下:
在C语言中,没有字符串变量,程序员需使用字符数组来处理字符串,字符串结束的标志是'',例 “hello”共5个字符,在内存占6个字节,字符串长度为5,在内存中存放的是字符的ASCII码。
在C库中实现了很多字符串处理函数,在程序中调用时必须在头文件中包含#include <string.h>,常见的字符串处理函数有:①求字符串长度的函数strlen②字符串拷贝函数strcpy③字符串连接函数strcat④字符串比较函数strcmp,具体用法如下:
strlen()的一个傻瓜式求法为:无论数组元素有多少,见到''即停止,且结果不包括''。
简单说明sizeof()与strlen()的区别为:strlen()求得的结果为有效长度,而sizeof()求得的结果为实际空间大小(长度)。例:char s[10]={‘A’,‘’,‘B’,‘C’,‘’,‘D’};中使用strlen()函数结果为1,使用sizeof()函数结果为10
字符串连接函数strcat代码举例:
#include <string.h>
#include <stdio.h>
int main()
{
char destination[25];
char blank[] = " ", c[]= "C++",turbo[] = "Turbo";
strcpy(destination, turbo);
strcat(destination, blank);
strcat(destination, c);
printf("%sn", destination);
return 0;
}
<< · Back Index ·>>
原网址:https://www.scotsman.com/heritage-and-retro/heritage/scottish-gaelic-and-irish-whats-the-difference-are-they ...