美文网首页
C语言基础(3)——函数的调用和指针

C语言基础(3)——函数的调用和指针

作者: 让时间走12138 | 来源:发表于2019-12-05 16:40 被阅读0次

    本节内容

    • 1.头文件
    • 2.实现文件
    • 3.什么是指针
    • 4.指针的类型
    • 5.指针和数组
    • 6.指针和函数
    • 7.指针实战——字符串的查找

    (一)头文件

    头文件一般用""或<>框起来,如果是系统自带的功能函数,那么就用<>。如果是我们自己定义的函数,那么就使用""。
    在头文件中我们一般只进行函数的声明,不包含代码块,无{}。头文件的下标一般为.h
    例如以下是计算器中的一个头文件:
    #include<stdio.h>
    //头文件里面声明函数
    int add(int a,int b);//加法 
    int minus(int a,int b);//减法 
    int multiply(int a,int b);//乘法 
    int devide(int a,int b);//除法
    

    (二)实现文件

    实现文件一般就是我们所说的源文件,在这里我们会写上函数的内容,明确该函数的任务。在这里我们会加上{},实现文件下标一般为.cpp。
    例如一下为计算器中的一个实现文件:
    #include"calculator.h"
    add(int a,intb){
          return a+b;}
    minus(int a,int b){
         return a-b;}
    multiply(int a,int b){
         return a*b;}
    devide(int a,int b){
         if(b==0){
              return 0;}
         else{return a/b;}
    

    函数的实现

    最后只需要在main函数前声明一下头文件,即#include"calculator.h"就可以正常使用了。例如:
    #include<stdio.h>
    #include"calculator.h"
    int main(){
       printf("1+1=%d\n",add(1,1));
       printf("2-1=%d\n",minus(2,1));
    return 0;}
    
    注:在开发一个小程序或者是软件的时候,我们就需要分工合作,每个人写自己的功能函数,最后在main函数中实现。

    (三)什么是指针

    • 指针的作用:如果希望在函数之间传递多个大于“1”的数给调用者,那么就必须使用指针。
    • 什么是指针:指针是一个变量,而且这个变量只能存放地址。指针变量占据“8”个字节空间。
    • *:(1)定义的时候这个符号表明是一个指针变量(2)使用的时候表明的是该地址所对应的值 ,但如果是%s,那么单一个p就表示所对应的值。不用加&
    • 注:如果只是声明一个指针变量,那么系统就不会分配内存空间。如果是定义一个变量并且要给它赋值,那么系统就要立刻分配内存空间。

    (四)指针的类型

    声明一个指针的格式一般为:int *p;(整型指针)char p;(字符指针)int ( * func)(int);(函数指针)等等。那么去掉一个星号和变量名就是指针的类型。如char * * p就是一个char类型的指针。
    • 指针变量只能指向同种数据类型的地址。例如整型指针只能指向整型变量的地址。
    • 指向一个普通变量:一级指针。指向一个地址:二级指针。
    • 普通指针变量:*p。
    • 常量指针:int const *pa=&50;常量指针不能改变指针指向的的变量的值,但是可以改变指向。如pa=&30;是正确的,但 *pa=30;时错误的。
    • 指针常量:指针常量就是数组,可以改变指针指向的变量的值,但是不能改变指向。int * const pb=&b;那么*pb=a;是正确的,但是 pb=&a;是错误的
    • 指向常量的常量指针:int const* const pb=&b;指针的指向和指针指向的变量的值都不能改变。

    (五)指针和数组

    首先定义一个数组 int num[5]={};那么数组名num就是数组的首地址。
    • 数组名本身没有分配内存空间
    • 如果使用sizeof函数,那么sizeof(num)就是计算整个数组的内存空间
    • 数组是一片连续的内存空间
    • 数组和指针的共同点:数组也可以用指针访问。如*(num+1)=30;指针里面如果不确定的话尽量加圆括号 用来分清结合方式。数组是一个指针常量,只能改变指向的值,不能改变指向。
    • int *a[10];这是一个指针数组,数组里面放的是整型指针

    (六)指针和函数

    • 作用:通过指针简介访问某个内存
    • 定义一个函数,什么情况下参数是指针。这个函数会不会改变传递过来的数据本身。
    • 需要改变外部的值,就将这个值定义为指针变量
    • 定义一个指针函数:
    void test(int *pa,int *pb){
    (*pa)++;
    (* pb)++;}
    
    test(&a,&b);调用一个指针函数。
    • 函数接收数组时,必须知道数组元素的个数。
    • 函数里面通过指针变量来接收数组的地址。
    • 指针变量无法确定指向的内容大小。

    (七)指针实战——字符串的查找

    • 项目内容:输入一组字符串,然后提示用户需要查找的字符串,程序自动打印出用户选择的字符串在该组字符串中出现的次数。
    • 在该程序中,我们需要调用函数,创建头文件和实现文件

    (1)创建头文件

    • 首先我们创造一个头文件,我们需要先声明我们将使用的函数。一个是用来接收用户输入的myscanf函数和input函数,一个是接收用户输入字符串的长度的find 函数。
    • 注:如果调用的函数在使用的函数前面 就需要提前声明。如果是在后面,那么也可以不用另外声明。
    • 如果是定义一个字符串,就使用char*;
    #include<stdio.h>
    
    void input(char*p,char*des);
    int find(char*sentence,char*word);
    void myScanf(char*p);
    

    (2)创建实现文件

    • 首先是myScanf函数,用来接收用户输入,用一个while循环,当遇到\n时就跳出。
    #include"myString"
    void myScanf(char*p){
      int i=0;
      while(1){
       char c=getchar();
          if(c='\n'){
           p[i]='\0';
           break;
        }
        p[i]=c;
         i++;
    }
    }
    
    • 然后是input函数,为了确保空格也能被输出来,所以我们要定义一个char*des来接收空格。
    void input(char*p,char*des){
         printf("%s",des);
         myScanf(p);
    }
    
    • 然后就是我们计算字符串长度的函数啦
    int length(char *p){
        int i=0;
        while(1){
            if(p[i]=='\0'){
                break;
            }
            i++;
        }
        return i;
    }
    
    • 然后我们需要使用find函数,来确定用户寻找的字符串在原字符串中出现的次数。首先得判断word与sentence的长度,如果前者大于后者,那么直接break;
    int find(char *sentence,char *word){
        //1.获取两个字符串的长度,因为sentence是字符串,所以用char * 
        
         int slength=length(sentence);
         int wlength=length(word);
         //2.判断查询的字符串长度是否比句子短 
         if(slength<wlength){
            return 0;
         }
         int start=0;
         int count=0;
         for(int i=0;i<slength;i++){
            //记录当前start的位置 
            start=i;
            int j=0;
            for(;j<wlength;j++){
                if(sentence[start+j]!=word[j]){
                    break;
                 }
             }
            if(j==wlength){
                //都相同,将i的值定位到start+j的位置
                 i=start+wlength-1; 
                 count++;
             }
         }
    
        return count;
    }
    
    • 完成了头文件和实现文件的创建以后,我们需要在main函数中使用这些函数
    #include<stdio.h>
    #include"myString.h"
    int main(){
        char sentence[100]={};
        char word[20]={};
        
         char *wdes="请输入查找单词";//定义一个字符串并且给它赋值。
         char *sdes="请输入语句";
        input(sentence,sdes);
        input(word,wdes);
        
        printf("%s\n",sentence);
        printf("%s\n",word);
        
        int count=find(sentence,word);
        printf("出现%d次:\n",count);
        
        return 0;
    }
    
    • 以上就是我们今天的全部内容了,你还在等什么,赶紧在电脑上把代码敲起来吧!!!

    相关文章

      网友评论

          本文标题:C语言基础(3)——函数的调用和指针

          本文链接:https://www.haomeiwen.com/subject/isalgctx.html