ywj123450 2017-11-29 12:05 采纳率: 0%
浏览 694

C语言二维数组的名称的困惑?

#include <stdio.h>

int main() {

int arr[10][10] = {0};

printf("arr is %p\n", arr);

printf("*arr is %p\n", *arr);

printf("&arr[0][0] is %p\n", &arr[0][0]);

return 0;

}

输出的结果为:

arr is 0x7fffedc99d40

*arr is 0x7fffedc99d40

&arr[0][0] is 0x7fffedc99d40

这里有个困惑,如果arr和*arr值是一样的,那是不是就意味着这样一个事实:arr内存放着一个地址0x7fffedc99d40,我通过*arr的方式去寻找0x7fffedc99d40这个地址对应的存储区,把里面的东西取出来,发现0x7fffedc99d40这个存储区里放的也是个地址,地址是0x7fffedc99d40,那如果我再做一次寻址,即**arr,我找到的还是存储区0x7fffedc99d40,它里面放的也是地址0x7fffedc99d40,但实际上**arr对应的存储区放的应该是值。

现在问题是,0x7fffedc99d40这个存储区里到底放的应该是什么?

  • 写回答

4条回答 默认 最新

  • threenewbee 2017-11-29 12:14
    关注
     arr内存放着一个地址0x7fffedc99d40
    不是放着地址,而是arr其实就是这个地址。
    这是编译器的魔术(语法糖)。
    所以
    char str[100];
    scanf("%s", str);
    按理说,scanf需要一个地址参数,但是写str也可以,和&str[0]一样。
    
    评论

报告相同问题?

悬赏问题

  • ¥15 为什么eprime输出的数据会有缺失?
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题