• 指针详解2


    总结:

    int i ;声明变量的实质是在内存中申请一个整型变量宽度的空间。

    const和int哪个放前,哪个放后效果都一样。

    指针变量可以指向别的内存地址,指针常量不许再次赋值。

    -------------------------------------------------------------

    int i1=30;
    int i2=40;
    const int * pi=&i1;
    pi=&i2;    //4.注意这里,pi可以在任意时候重新赋值一个新内存地址
    i2=80;    //5.想想看:这里能用*pi=80;来代替吗?当然不能

    int const *pi=&i1; pi前没有用const修饰,所以pi是一个指针变量,能被赋值重新指向另一内存地址。const修饰的是整个*pi,所以*pi是常量,不能被赋值。

    可以通过pi指向别的内存地址,但是其中的值不能通过*pi直接进行修改

    -------------------------------------------------------------

    int i1=30;
    int i2=40;
    int * const pi=&i1;
    //pi=&i2;    4.注意这里,pi不能再这样重新赋值了,即不能再指向另一个新地址。
       //所以我已经注释了它。
    i1=80;    //5.想想看:这里能用*pi=80;来代替吗?可以,这 里可以通过*pi修改i1的值。

    可以通过*pi修改i1的值,永远只能指向初始化地址,其中的值可以修改。

    ------------总结一下两者的区别:指针常量所指向的地址是不能改变的,但是地址中的值是可以通过*pi改变的。指针变量的地址是可以改变的,只是不能通过指针修改其中的值。

    ----------------------------------------------------------------------------------------

    就像某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也可以存储在某个函数指针变量里,通过函数指针变量调用所指向的函数。

    函数指针:void myfun(int x); 

                     void (*funp)(int);//声明一个用以指向同样参数,返回值函数   的指针变量

    其实myfun的函数名和funp函数指针都是一样的,即都是函数指针,myfun函数名是一个函数指针常量,而funp是一个函数指针变量

    但如果都如(*myfun)(10):这样,书写与读起来不方便和不习惯,所以才设计成myfun(10)这种形式调用,赋值时,可以是funp=&myfun的形式,也可以是funp=myfun。

    --------------------------

    函数指针变量是一个变量,当然也可以作为某个函数的参数使用。

    引自:https://www.cnblogs.com/qiaogaojian/p/5861554.html

  • 相关阅读:
    Java调用R环境配置问题:Cannot find JRI native library!
    在odoo 10.0配置文件中修改ip地址
    WordPress国外开源主题Enigma h1、h2、h3……标题不显示的解决办法
    ubuntu下编译为知笔记
    ubuntu linux 使用什么下载工具
    通过修改qt设置,解决LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”
    [DONE]ReferenceError: WebSocket is not defined pomelo
    [DONE]pomelo npm-install 出现 AttributeError: 'module' object has no attribute 'script_main'
    finished running <my app>” on the targeted device
    c++中64位int与字符串的转换
  • 原文地址:https://www.cnblogs.com/ymd12103410/p/9550521.html
Copyright © 2020-2023  润新知