• C和指针之学习笔记(2)


    6章 指针

    1.在一组字符串中查找字符:

    #include<stdio.h>

    #include<assert.h>

    #include<stdlib.h>

     

    #define TRUE 1

    #define FALSE 0

     

    int find_char(char **strings , int value)

    {

    //  assert(strings != NULL);

     

      while(*strings !=NULL){

            while(**strings!=''){

               if(*(*strings)++ == value )

                    {

                    puts("i can be here! ");

                    return TRUE;

                    }

    }

      strings++;

    }

    return FALSE;

    }

    int main()

    {

     char abc[5][5]={"abcd","efgh","ijkl","mnop"};

     char **p;

     p=(char **)malloc(sizeof(char**));   //需要注意1

     *p=&abc[0][0];

     char value;

     puts("Please input your char:");

     scanf("%c",&value);

     

     int num=find_char(p,value);     // 需要注意

     printf("number is %d ",num);

     

     return 0;

    }

     

    (1)声明了指针之后要对其进行初始化,因为指针变量不会自动分配任何内存。否则会出现错误:Segmentation fault (core dumped)

    (2)二数组名代表了数组的起始地址,如 char arr[5][6]; 那么数组名 arr就是这个二维数组的首地址。这样的写法:char arr[5][6], *p; p=arr;是错误的,二维数组名是一个二级指针,是地址的地址  ,char arr[5][6]; char **p; p=arr;这样写同样是错误的

         直接将abc传给find_char是错误的,即:find_char(abc,value)。这样会出现错误:passing argument 1 of find_charfrom incompatible pointer type

     

    2.字符串反向打印

    #include<stdio.h>

    #include<stdlib.h>

     

    void reverse_string(char *string)

    {

     char *p;

     p=(char *)malloc(sizeof(char *));

     p=string;

     while(*p!=''){    //只能用*p!='’作为判断条件,不能用p!=NULL,此时p指向了’’

      p++;

    }

     printf("The reverse string is : ");

     while(p>=string){  //这里的条件很重要

     putchar(*p);

     p--;

    }

    printf(" ");

    }

     

    int main()

    {

    char abc[20];

    puts("Please input your string:");

    scanf("%s",abc);

    printf("the string is : %s ",abc);

    reverse_string(abc);

    return 0;

    }

     

    7章 函数

    1. 规则:所有参数都是传值调用数组例外,因为数组参数的值是一个指针,下标引用实际上是对这个指针执行间接访问操作。

    eg:整数交换

    void  swap(int x, int y)

    {

       int  temp;

       temp = x;

       x = y;

       y = temp;

    }

       无效,因为实际交换的是参数的拷贝,原先的参数值并未进行交换。

     

    void  swap(int *x, int *y)   //有效

    {

       int  temp;

       temp = *x;

       *x = *y;

       *y = temp;

    }

     

    2.‘0’+0=’0’;  ‘0’+1=’1’;  ‘0’+2=’2’;  .......

     

    3.阅读递归函数最容易的方法不是纠缠于它的执行过程,而是相信递归函数会顺利完成它的任务。递归函数的变量空间创建于运行时堆栈上。

     

  • 相关阅读:
    mongoDB安装配置
    linux-批量修改目录下后缀shell
    备份mysql的shell
    mysql_DML_索引、视图
    mysql_存储过程
    mysql_备份_mysqldump
    mysql_DCL_grant/revoke
    mysql_DML_select_子查询
    mysql_DML_select_union
    mysql_DML_select_聚合join
  • 原文地址:https://www.cnblogs.com/clover-siyecao/p/5437829.html
Copyright © 2020-2023  润新知