实验四 指向数组的指针、指向二维数组的指针、指针数组
知识拓展:
数组(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)。
pointerToArray.c 利用指针遍历输出一维数组二维数组
(1)程序说明:利用指向数组的指针,实现遍历输出一元和二元数组的方法。
(2)实验代码:
#include<stdio.h>
#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)
{
}
searchWord.c 在指针数组中寻找每个指针指向的字符串是否与目标字符串相等
知识拓展:
这个实验中用到了预编译宏和字符串的相关知识,这个会在接下来的实验七和实验八再具体学习。
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数组来储存指向字符数组的指针,同时利用<string.h>中的strcmp()来判断table数组中是否存在 key 值,如果存在,则把该值的数组序号打印出来,不存在就说明不存在。函数searchWord() 如果找到该字符串就返回0,如果没找到则返回-1。
(2)实验代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define SIZE(a) (sizeof(a) / sizeof(*a))
/*
程序说明:利用table数组来储存指向字符数组的指针,同时利用<string.h>中的strcmp()来判断
table数组中是否存在 key 值,如果存在,则把该值的数组序号打印出来,不存在
就说明不存在
*/
// 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)
{
}