C语言学习周总结006(指针)

指针(Pointer)可谓是C语言的一大精髓,同样也是C语言学习的一大难点,早在正式开始学习C语言前就听说过这一大名,如今我也开始接触到了它。通过课上的学习以及课下的整理,我对指针有了一些了解。



1.定义

  在认识指针前,我们先要认识内存地址这一概念。要知道,我们每定义一个变量,系统就会在内存中为该变量分配一段内存空间,这段空间的长度取决于变量类型(如int型为4个字节),而这段空间在内存中就存在着地址,系统读取一个变量会先找到其首地址,然后再按其类型读取接下来的几个字节,这里的首地址就是该变量的内存地址。而指针(变量)就是存储着某一变量地址的变量,系统可以通过指针(变量)访问其所指向的另一个变量,因此形象地将其称为指针。 指针变量的定义通常如下图所示:

  

  注意指针变量p的类型必须与所指向变量的类型相同。

 

 

2.应用

  应用指针我们可以定义一个交换两个变量值的函数swap,如下图所示:

 

其调用时需传入两个待交换变量的地址,如下图所示:

 

3.例题

  编写函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。

  函数接口定义:

  void strmcpy( char *t, int m, char *s );

  裁判测试程序样例:

#include <stdio.h>
#include <string.h>
#define MAXN 20

void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */

int main()
{
    char t[MAXN], s[MAXN];
    int m;

    scanf("%d\n", &m);
    ReadString(t);
    strmcpy( t, m, s );
    printf("%s\n", s);

    return 0;
}

/* 你的代码将被嵌在这里 */

 

  分析:

    复制前先要判断给定第m个字符是否在字符串t的范围内,若超出范围直接将新字符串s赋值为空(NULL),若在范围内则进行下一步的复制。具体步骤见代码注释。

  代码:

void strmcpy( char *t, int m, char *s )
{
    int lens = strlen(t);  // 定义字符串t的长度lens
    if (m <= lens){  // m若在字符串t的长度范围内
        int len = 0;  // 定义新字符串s的长度len并初始化为0
        for (int i = m-1; i < lens; i++){
            s[len++] = t[i];  // 将字符串t中第m个字符以后的所有字符依次复制给新字符串s
        }
        s[len] = '\0';  // 字符串必须以'\0'结尾才有效
    }else{
        *s = NULL;  // m超出字符串t的长度范围,新字符串s为空(NULL)
    }
}

   运行测试:

    输入:9(换行)This is Bubble speaking

    运行结果:Bubble speaking

  

 

    输入:10(换行)oversize

    运行结果:(空)

  

 

程序运行成功!



 

通过学习指针,我对C语言的了解又更深了一层,希望未来能继续深挖C语言的有关知识!

END:) 

 

posted @ 2021-11-21 17:27  Bubbleლ  阅读(13)  评论(0编辑  收藏  举报