V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
thomaswang
V2EX  ›  问与答

c 语言指针问题 1

  •  
  •   thomaswang · 2018-03-02 16:35:21 +08:00 · 1626 次点击
    这是一个创建于 2484 天前的主题,其中的信息可能已经有所发展或是发生改变。
      int a;
      int *p = &a;
    
      int a[5];
      int *p = a;
    
    

    对指针 p 赋值的时候,为什么一个是对 a 取地址,一个是变量 a 就行了

    13 条回复    2018-03-03 00:28:44 +08:00
    dtgio
        1
    dtgio  
       2018-03-02 16:38:38 +08:00 via iPhone
    因为第一个 a 是 int,另一个 a 是 int[]
    (。)
    Alchemistxxd
        2
    Alchemistxxd  
       2018-03-02 16:43:01 +08:00
    因为第二个的内存布局是 int *a
    hxndg
        3
    hxndg  
       2018-03-02 16:45:33 +08:00
    你需要首先解释变量 a 是个什么东西,
    然后再考虑你问的这个问题。
    xrui
        4
    xrui  
       2018-03-02 16:45:46 +08:00 via Android
    数组名是数组首元素的地址
    johnniang
        5
    johnniang  
       2018-03-02 16:46:39 +08:00 via Android   ❤️ 1
    第二个 a 本身就是地址
    thomaswang
        6
    thomaswang  
    OP
       2018-03-02 16:47:45 +08:00
    @xrui 怎么你一说,我就懂了呢
    xrui
        7
    xrui  
       2018-03-02 16:51:56 +08:00 via Android
    @thomaswang 我也就书上概念背得熟而已😂多看看书就好啦~
    aheadlead
        8
    aheadlead  
       2018-03-02 16:54:20 +08:00 via iPhone
    @thomaswang 因为他说的对而且准确
    hxndg
        9
    hxndg  
       2018-03-02 17:39:12 +08:00
    @thomaswang
    如果前面的你看不懂,你可能需要去看一些基础的 c 教程,或者拿 gdb 追一边代码
    bibizhang
        10
    bibizhang  
       2018-03-02 17:57:35 +08:00   ❤️ 1
    数组名是数组第一个元素的地址,这是王八的屁股-龟腚。
    but0n
        11
    but0n  
       2018-03-02 22:42:55 +08:00
    数组和指针之间有着蜜汁关系, c 语言圣经里有讲过
    thomaswang
        12
    thomaswang  
    OP
       2018-03-03 00:21:21 +08:00 via iPhone
    @but0n 圣经是那本呢
    sfqtsh
        13
    sfqtsh  
       2018-03-03 00:28:44 +08:00 via Android   ❤️ 1
    数组名 a 是个变量,它的类型是数组类型 int [5],并不是指针类型。数组名传递时会 退化 为指针:该指针的类型是数组包含的元素类型,这里是 int ;该指针指向数组的第一个元素。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3084 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 13:15 · PVG 21:15 · LAX 05:15 · JFK 08:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.