树莓派(3)C语言实验四

实验四 指向数组的指针、指向二维数组的指针、指针数组

知识拓展:
数组(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)
{

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值