• C语言学习笔记(5)


    指针进阶

    1. 指针数组

    • 一维指针数组的定义:

      类型名 *数组名[数组长度];

      char *color[5];

    • 指针数组是由指针变量构成的数组,在操作时,既可以直接对数组元素进行赋值(地址值)和引用。

    2. 指向指针的指针

    • 指向指针的指针的定义

      类型名 **变量名

      int a = 10;
      int *p = &a;
      int **pp = &p;
      
    • 二级指针的操作

      int a = 10, b = 20, t;
      int *pa = &a, *pb = &b;
      int **ppa = &pa,  **ppb = &pb, **ppt;
      
    • 二维数组的指针形式
      二维数组是数组元素为一维数组的一维数组;
      二维数组a中三层次的指针等价关系:

      • 虽然a与 * a的值相同,但是含义不同。a是行元素的首地址,又称为行地址,是二级指针,而* a是首行第一个元素的地址,又称为列地址,是一级指针

      • 由于a[i]等价于 *(a+i)的关系,因此既可以用下标表示法,也可以用指针表示法,或者混合运用。例:

      a[i][j] <=> * ( *(a+i) + j) <=> *(a[i] + j)

    • 指针数组与二级指针

      与二维数组名类似,指针数组名也是二级指针,用数组下表能完成的操作,也能用指针完成

    • 采用动态内存的方法处理多个字符串的输入的优点在于,能够根据实际输入数据的多少来申请和分配内存空间,从而提高了内存的使用率。

    • 命令行参数

      命令行的一般形式

      ​ 命令名 参数1 ..... 参数 n

      命令名和各个参数之间用空格分隔,也可以没有参数

      在C语言程序中,主函数main( )可以有两个参数,用于接收命令行参

      int main (int argc, char *argv[])
      {
      ...
      }
      

      调用main( )时将命令有关的信息作为实参传递给两个参数

    字符定位

    1. 指针作为函数的返回值

    • 在C语言中,函数返回值的类型除了整型、字符型、和浮点型等基本数据类型外,也可以是指针,即函数可以返回一个地址

      注:不能在实现函数时返回在函数内部数据类型对象的地址,这是因为所有的局部数据对象在函数返回时就会消亡,其值不在有效。

    • 返回函数的一般都是全局数据对象或者主函数中对象的地址

    2. 指向函数的指针

    • 在C语言中,函数名代表一个函数的入口地址。可以定义一个指针变量,接收函数的入口地址,让他指向函数,这就是指向函数的指针(函数指针)

    • 函数指针的定义

      ​ 类型名 (*变量名)(参数类型列表);

      类型名指函数返回值类型;

      变量名是指向函数的指针变量名称;

      int (*funptr)(int, int);
      // 定义了一个函数指针funptr
      //可以指向两个整型参数且返回值类型为int的函数
      
    • 通过函数指针调用函数

      在使用函数指针前,要先对它赋值。赋值时,将一个函数名赋值给函数指针但函数必须已定义或者声明,且函数返回值的数据类型和函数指针类型要一致

      通过函数指针调用函数的一般形式:

      (*函数指针名)(参数表);

    3. 函数指针作为函数的参数

    • C语言调用中,函数名或已赋值的函数指针也能作为实参,此时,形参就是函数指针,它指向实参所代表的函数的入口地址。

    我的手写笔记



    我的代码









    我的问题

    1.二级指针操做



    2.数组指针与指针数组

    • 指针数组:是指一个数组里面装着指针,也即指针数组是一个数组;
      定义形式:int *a[10];
    • 数组指针:是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已;
      定义形式:int (* p)[10]; 其中,由于[]的优先级高于 * ,所以必须添加( * p).

    PTA问题

    1.strcat函数原型:

    char *str_cat( char *s, char *t ){
    char *ps=s ,*pt=t; 
    while (*s!='')               
    {
    	*ps=*s;	
    	s++;
    	ps++;
    }
    while(*t !=''){
    	*s++=*t++;
    }
    return s;
    }
    
    char *str_cat( char *s, char *t ){
    	int a, i;
    	a = strlen(s);
    	for(i=0; *(t+i)!=''; i++)
        *(s+a+i) = *(t+i);
    	return s;
    }
    
    
    char *str_cat( char *s, char *t ){
      int i,j;
      for(i=0;i<=strlen(s);i++)
      {
      	if(s[i]=='')
        {
      		for(j=0;j<strlen(t);j++,i++)
            {
      			s[i]=t[j];
      	   }
      		s[i]='';
      	}
      }
      return s;
    }
    
  • 相关阅读:
    git 提示error setting certificate verify locations 解决方案
    检查性异常和非检查性异常
    Intellij IDEA 代码格式化/保存时自动格式化
    IntelliJ IDEA 如何设置类头注释和方法注释
    IntelliJ IDEA 创建 Java包
    python列表的增删改查用法
    我的第一篇博客
    Python全局变量和局部变量相关知识点
    学生管理系统(改进版)
    Python---函数的相关知识点总结一:
  • 原文地址:https://www.cnblogs.com/ABClazyboy/p/12687910.html
Copyright © 2020-2023  润新知