• c语言指针复习 难点突破 双重指针 函数指针结构体指针等...


    99.99%的人不会研究c 指针的高级用法 因为连课本都对此避之不及 实际应用一些小项目小问题也不会用双重指针啊啥的...

    就导致绝大部分人,比如我都压根不探究这些

    今天本着求知的态度去学习

    首先来看指针运算,这个就当复习玩

    打印指针 是地址 都懂 指针本来就取的地址 

    指针加减整数呢?

     

     本来pa 是15006356(地址) 怎么加了10就成了15006396? 不应该是15006366吗? 加了40

    用double呢

     怎么加了40?

    用char

     

     +5 之后确实是+5 不是+40

    公式: 指针+- 整数  实际增加/减少为: 整数*sizeof(ElementType) 其中ElementType为数据类型

     指针- 指针:

     

     

     596-584 = 12 = 3*4 = 3*sizeof(ElementType)

    公式: 指针+- 指针   实际增加/减少为: 地址差值 / sizeof(ElementType) 其中ElementType为数据类型

    意思就是 他们差了3倍的数据类型单位长度啊

    在连续内存中:

     加1就是加了一个sizeof (int) 对的 这就是前面所讲指针的运算

    这些等价:应该都懂

     公式:

    设数组名为arr,则 arr + n = &arr[n];//数组名就是数组首地址,函数名也是。

    arr[n] = *(arr + n)

    用指针遍历数组:

    双重指针:

    就是指向指针的指针。

     这段代码 目的是 把str的空间大小改为6。然后把china这个字符串拷贝进去。因为字符串以/0 结尾 所以大小不是5是6.

    但是 事实上 这样做 str的大小呢 还是null

    因为 函数传参是传值罢了。仅仅传一个值、想要改变真正的值,肯定要用地址。你用一个*类型的 去改动*类型 怎么可能呢。

    这个分配的 6 存储空间 本质上是给了memorystr 然后局部变量 函数运行完毕释放了。

    怎么真正改呢?

     我们不妨这么理解。要改动char str,需要修改char* str 

    那么要改动char * str ,就要用到char** str 。

    所以这个双重指针就是很简单 用来改变一重指针呗。

    上边的代码 就是调用GetMemory时 因为参数是**     传值 传给了**一个*(能看懂么)

     这个取地址就成了一级指针 * 

    所以呢 这其中其实是修改了二级指针的指向

    此时**memorystr = &str 即

    **memorystr 指向了str的地址 

    *memory 指向了str

    对*memory指向的元素 (str)进行了改动 当然可以成功

    再来看一个双重指针的例子

    目的是改变传入的值是bbb 但是实际输出还是aaa

    由上边讲到的,改变这个char * 肯定要用char**

    **p = &v 当做**p = *v

    那么*p = v

    p指针指向v

    对*p赋值就是对v赋值 对吧

    建议大家多找 多做一些这样的例子

    函数指针:指向函数的指针变量 

    int(*p)(int x , int y);

    针函数:是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。(没什么用)

    这么写:

    int *fun(int x,int y);
    int * fun(int x,int y);
    int* fun(int x,int y);

    如何用函数指针调用函数:

     

     

  • 相关阅读:
    ubuntu18 faster-rcnn
    osgViewer应用基础
    error C2086: “int WINGDIAPI”: 重定义
    test5
    test3
    test2
    Kinect关节数据
    MySQL乱码问题以及utf8mb4字符集
    mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg
    yum安装软件报错:curl#6
  • 原文地址:https://www.cnblogs.com/ranzhong/p/15787366.html
Copyright © 2020-2023  润新知