美文网首页
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)——函数的调用和指针

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

  • C语言基础及指针⑤动态内存分配

    接续上篇C语言基础及指针④函数指针 在上一篇我们了解C语言中的函数及函数指针 , 使用函数指针 , 模拟了网络请求...

  • iOS开发 -- C语言基础11(返回指针的函数与指向函数的指针

    iOS开发 -- C语言基础11(返回指针的函数与指向函数的指针) 前言 前面我们花了接近3个章节学习指针,应该都...

  • iOS 理解Block的调用

    Block是C语言的扩充功能。 1.先看看C语言的函数: 直接调用: 使用函数指针调用: 将func赋值给func...

  • C语言函数指针和指针函数

    C语言函数指针和指针函数 在学习C语言的过程中,“指针函数”和“函数指针”经常容易搞混了, 最简单的辨别方式就是看...

  • C语言特性(函数与指针)

    函数与指针 用函数指针变量调用函数 当定义函数之后,C语言允许定义一个指针变量来指向该函数,接下来就可通过该指针变...

  • C语言基础及指针④函数指针

    接续上篇C语言基础及指针③函数与二级指针 在上一篇中 , 我们学习了函数与二级指针 , 函数和java中的方法类似...

  • C语言22 调用约定和函数指针

    C语言22 调用约定和函数指针 函数调用约定 就是告诉编译器:怎么传递参数,怎么传递返回值,怎么平衡堆栈 常见的几...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • 笔记3

    1函数调用的传值方式:1)按值传递2)地址传递 3)引用传递=指针传递的简化2函数重载c语言中函数的名称是可以--...

网友评论

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

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