• C语言学习笔记_指针相关知识


    C语言学习笔记_指针相关知识

    指针数组和数组指针

    // 指针数组,数组中保存10个int*变量;
    int *p[10];	
    
    // 数组指针,指针变量p指向一个数组,数组是长度为5的int数组;
    int (*p)[10];	
    

    对于一个符号而言,如果此符号和[] 结合,则它为数组,如果和 *结合,则为指针变量,如果和()结则为函数;

    本例中的int *p[10]中,因为[]的优先级高于 *,所以认为符号p和[]结合,所以p是数组,保存的类型为int *;

    本例中的int (*p)[10]中,通过括号改变了优先级,所以p是指针变量,指向int [5]的一个数组;

    C++中可以通过new int[len]将一个指针变成数组,这样可以使得数组的长度不用直接写出来;

    函数指针的定义

    // 定义一个函数func;
    void func(void);
    
    // 定义了一个func类型的函数指针,并指向func
    void (*p)(void);
    p = func;
    
    // 定义了一个strcpy函数同类型的函数指针,并指向strcpy
    char* (*pFunc)(char*, const char*);
    pFunc = strcpy;
    
    // 因为函数指针过长,所以使用typedef重新定义为pType,在定义p1、p2就会很方便
    typedef char* (*pType)(char*, const char*);
    pType p1, p2;
    

    typedef的一些用法

    // 将结构体struct student重命名为student,
    // 将指向此结构体的指针变量重命名为pStudent;
    typedef struct student {
    	char *name;
    	int age;
    }student, *pSthdent;
    
    // 用typedef重定义指针变量
    typedef int* PINT;
    
    // 此二者效果都等于int * const p1,即指针是常量,但是指针指向的不是常量
    const PINT p1;
    PINT const p2;
    
    // 只有这种条件下才可以使得指向的变量为常量
    typedef const int* CPINT;
    

    之所以要将结构体用typedef重命名,是因为c语言申明结构体的时候一定要加struct,所以用typedef简写,但是C++就不需要,在C++中struct和class几乎没有区别;

    typedef话可以用来做中间类型的缓冲,主要为了提高代码的可移植性;

    二重指针和二维数组

    //  一般二重指针用于指针数组
    int* array[10];
    int **p;
    p = array;
    
    // 以下几种情况是等价的
    array[0][0] == *(*(p+0)+0);
    array[i][j] == *(*(p+i)+j);
    
  • 相关阅读:
    网页中防拷贝、屏蔽鼠标右键代码
    Enterprise Library Exception Handling Application Block Part 1
    vs debug 技巧
    Winforms:消除WebBrowser的GDI Objects泄露
    WinForm窗体之间交互的一些方法
    TableLayoutPanel用法
    Winforms:把长ToolTip显示为多行
    Winforms: 不能在Validating时弹出有模式的对话框
    Winforms: 复杂布局改变大小时绘制错误
    读取Excel默认工作表导出XML
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13191491.html
Copyright © 2020-2023  润新知