zoukankan      html  css  js  c++  java
  • 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);

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

     

     

  • 相关阅读:
    ruoyi管理系统建立子项目,卡住
    JSON
    各类求自然数幂和方法
    一个关于序列区间gcd的小trick
    【JZOJ6654】【2020.05.27省选模拟】数据结构
    【JZOJ6569】【GDOI2020模拟】夕张的改造 (kaisou)
    拉格朗日插值法
    【JZOJ1914】【2011集训队出题】最短路
    【JZOJ4817】【NOIP2016提高A组五校联考4】square
    【JZOJ4816】【NOIP2016提高A组五校联考4】label
  • 原文地址:https://www.cnblogs.com/ranzhong/p/15787366.html
Copyright © 2011-2022 走看看