知识拓展:
数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element)。数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存。
以int arr[] = { 99, 15, 100, 888, 252 };为例,该数组在内存中的分布如下图所示:
定义数组时,要给出数组名和数组长度,数组名可以认为是一个指针,它指向数组的第 0 个元素。在C语言中,我们将第 0 个元素的地址称为数组的首地址。
以上面的数组为例,下图是 arr 的指向:
引入数组指针后,我们就有两种方案来访问数组元素了,一种是使用下标,另外一种是使用指针。
1) 使用下标
也就是采用 arr[i] 的形式访问数组元素。如果 p 是指向数组 arr 的指针,那么也可以使用 p[i] 来访问数组元素,它等价于 arr[i]。
2) 使用指针
也就是使用 *(p+i) 的形式访问数组元素。另外数组名本身也是指针,也可以使用 *(arr+i) 来访问数组元素,它等价于 *(p+i)。
(1)程序说明:利用指向数组的指针,实现遍历输出一元和二元数组的方法。
(2)实验代码:
#includesearchWord.c 在指针数组中寻找每个指针指向的字符串是否与目标字符串相等#define length1 9 #define length2 4 #define length3 4 void traverseUnary(int * ,int length ); void traverseBinary(int (*) [length3],int,int); int main() { int unaryArray[length1] = {32,43,23,68,49,30,21,20,34}; int binaryArray[length2][length3] = {{23,12,23,42},{32,11,33,54},{23,34,56,20},{23,34,13,40}}; int * upointer = unaryArray; int (*bpointer)[length3] = binaryArray; traverseUnary(upointer,length1); traverseBinary(bpointer,length2,length3); } void traverseUnary(int * upointer,int ulength) { } void traverseBinary(int (*bpointer)[4],int blength1,int blength2) { }
知识拓展:
这个实验中用到了预编译宏和字符串的相关知识,这个会在接下来的实验七和实验八再具体学习。
C语言中的字符串是一个 char 型的一维数组。
keyword是指向指针(或者说字符数组)的数组,例如第一个元素存放的是指向“hello”这一个字符数组的指针。
char * keyword[] = {
“hello”,
“raspberry”,
“hope”,
“you”,
“enjoy”,
“it”
};
SIZE(a) 来求数组a的长度
#define SIZE(a) (sizeof(a) / sizeof(*a))
C语言strcmp ()函数:比较两个字符串
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。
(1)程序说明:利用table数组来储存指向字符数组的指针,同时利用
(2)实验代码:
#define _CRT_SECURE_NO_WARNINGS #include#include #include #define SIZE(a) (sizeof(a) / sizeof(*a)) // searchWord,在table中寻找是否有key ,若有,则返回0.若没有,则返回-1 int searchWord( char* table[], int size, const char* key, int *pos); int main() { int pos = 0; char * key = "raspber"; //指针数组,装满了指针的数组, char * keyword[] = { "hello", "raspberry", "hope", "you", "enjoy", "it" }; if(searchWord(keyword,SIZE(keyword),key,&pos)==0) { printf("the %s is in keyword! And the index is %d n",key,pos); } else { printf("sorry,no such word in keywords"); } } int searchWord( char* table[], int size, const char* key, int *pos) { }



