`
kmplayer
  • 浏览: 512733 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数组名是地址么?它和地址的差异在哪里呢?

 
阅读更多
如果运算需要的话,所有的数组都存在到它元素的指针类型的右值的隐式类型转换。
说数组是本身就是地址是不科学的,而应该说数组能够自动的转化为指向他的元素的指针,这种转化是单向的,是一种退化,损失了原来数组的大小这个重要的信息。除了 sizeof 之外,其他运算符作用到数组上的时候,都要发生这种转化,即使取下标也不例外。
比如整型二维数组w[3][4],
先不要把 w 看作地址。把 w 看作三个四个元素的数组的组成的数组
sizeof(w)       不转化
sizeof(w+0)     转化
由于那么 w 是三个四个元素的数组组成的数组,那么它就可以隐式地转为指向四个元素的数组的指针.
w[0][0] = 0     两次转化
w = NULL        无法转化
#include <iostream>
using namespace std;

int main()
{
    char a[3][4];

    cout<<sizeof(a)<<endl;
    //输出数组的大小:12
    
    cout<<sizeof(a+0)<<endl;
    //输出指针大小:4
    //由于那么 a 是三个四个元素的数组组成的数组,
    //那么它就可以隐式地转为指向四个元素的数组的指针

    a[0][0] = 'a';//两次转化

    return 0;
}
分享到:
评论

相关推荐

    链表和数组的区别在哪里? 数组和链表.pdf

    数组和链表是两种常见的线性数据结构,它们在逻辑结构和内存管理上有显著的差异。 首先,从逻辑结构的角度来看,数组是一种顺序存储的数据结构,其中每个元素都有一个唯一的索引或下标,通过这个下标可以直接访问到...

    c语言中 数组名和指针的区别

    在C语言中,数组名和指针之间存在微妙且重要的区别,这往往让初学者感到困惑。虽然在某些上下文中,它们看似可以互换使用,但深入理解它们的本质差异对于编写高效、安全的代码至关重要。 ### 一、数组名与指针的...

    数组名 != 指针

    通过对上述概念和例子的分析,我们可以得出结论:虽然数组名在很多方面表现出与指针相似的特性,但它本身并不是指针。理解这两者之间的区别对于编写正确且高效的C/C++代码至关重要。希望本文能帮助大家更好地掌握...

    C/C++数组名与指针区别深层探索

    在C/C++中,数组名通常被视为一个常量,表示数组的第一个元素的地址。例如,在声明`int arr[10];`后,`arr`表示的是一个包含10个整数的数组,同时`arr`也可以被看作是指向数组第一个元素的地址。 **指针:** 指针是...

    数组与指针区别(很全面)

    本文旨在澄清关于数组名是否等同于指针这一常见的误区,并通过具体的代码示例来深入探讨数组和指针之间的关系及其差异。 #### 二、数组与指针的基本概念 1. **数组**: - 数组是一系列相同类型的数据项的集合。 ...

    遍历数组和链表 数组和链表.pdf

    本文将从遍历数组和链表的角度,比较它们之间的差异,探讨数组和链表的优缺点,并分析为什么数组的速度要比链表快。 首先,数组是一种具有相同数据类型且按一定次序排列的变量的集合体,其在内存中的地址是连续的,...

    C和C++中数组名与指针的区别.pdf

    在C和C++中,数组名与指针之间存在一些关键性的区别,这些区别对于理解这两种数据类型及其应用场景至关重要。 - **数组名**: 表示的是数组的起始地址,也就是数组第一个元素的地址。在C/C++中,数组名通常被视为一...

    java中链表和数组的区别? 数组和链表.pdf

    在这篇文章中,我们将探讨链表和数组的区别,並探讨它们各自的特点、优缺点和应用场景。 数组 数组是一种线性结构,可以直接索引,即要去第 i 个元素,a[i] 即可。数组的元素在内存的栈区,系统自动申请空间。数组...

    python算法-数组和链表 数组和链表.pdf

    数组和链表的差异也体现在读取方面。在需要读取链表的最后一个元素时,你不能直接读取,因为你不知道它所处的地址,必须先访问元素#1,从中获取元素#2的地址,再访问元素#2并从中获取元素#3的地址,以此类推,直到...

    数组名a和&a的区别

    数组名`a`和取地址运算符`&a`之间的区别可能会引发一些混淆,但理解它们的本质可以帮助我们更好地编写和理解C语言程序。 首先,让我们澄清数组名的概念。数组名`a`实际上是数组首元素的地址。这意味着当你使用`a`时...

    Matlab中数组和矩阵的区别

    在MATLAB中,数组和矩阵是两种基本的数据结构,它们都是多维数组的形式存在,但有着不同的特性和用途。理解这两者之间的区别对于有效利用MATLAB进行计算和数据分析至关重要。 首先,MATLAB中的所有数据变量,无论是...

    C#中各种数组的性能比较

    本文将深入探讨这三种数组在C#中的性能差异,帮助开发者在实际应用中做出更加合理的选择。 ### 一维数组 一维数组是最常见的数组形式,其特点是所有元素存储在一个连续的内存空间中,索引从0开始。这种结构使得...

    指针与数组.docx 指针数组:数组类型 *数组名数组长度

    两种方法在内存管理和计算效率上可能存在细微差异,但在大多数情况下,它们都可以达到相同的效果。选择哪种方式取决于具体的应用场景和编程需求。 总结来说,指针数组和数组指针是C语言中处理复杂数据结构的工具,...

    C_C++数组名与指针区别探索

    然而,这种指针有一个特殊性:它是不可修改的,也就是说,不能通过增加或减少的方式改变数组名所指向的位置。这是因为数组名一旦被定义,就固定指向数组的第一个元素,不会改变。 ##### 指向数组的指针 另一方面,...

    数组和指针之间的区别与联系

    在C语言中,数组和指针是两个非常重要的概念,它们之间既有明显的区别,也有紧密的联系。数组是一种数据结构,而指针则是一种特殊的数据类型,用于存储内存地址。理解这两者的差异和关联对于深入学习C语言至关重要。...

    交错数组和多维数组分析

    ### 交错数组与多维数组分析 #### 一、交错数组(Jagged Arrays)概念解析 ...通过上述分析,我们可以看出交错数组和多维数组在数据结构上的差异及其应用场景。交错数组因其灵活性而在处理不规则数据时显得尤为重要。

    数组和指针的区别(通俗易懂)

    数组和指针虽然在某些场景下可以互相替代,但它们的设计初衷和功能特性存在显著差异。数组提供了对固定大小、同类型元素的快速访问,而指针则赋予了程序更大的灵活性,尤其是对于动态内存管理和函数间的参数传递。...

    交错数组与多维数组的区别

    在C#中,我们有两种主要的数组形式:多维数组和交错数组。这两者虽然都是用来组织数据,但它们在结构和使用上有着显著的差异。接下来,我们将深入探讨这两种数组类型,并通过在VS2010环境下使用C#语言进行讲解。 ...

    整形数组与字符数组相互转换

    在编程领域,数组之间的转换是常见的操作,尤其是在处理不同类型数据时。本示例涉及的是整形数组(int array)与字符数组(uchar array)之间的转换,这对于数据存储和传输具有重要意义。在Qt或VC++环境中,这种转换...

    C++之数组与指针的异同 pdf

    在C++编程语言中,数组和指针是两种非常重要的数据结构,它们在内存管理和数据访问方面发挥着关键作用。然而,尽管它们在某些场景下可以互换使用,但它们之间存在着本质的区别,理解这些差异对于高效编程至关重要。 ...

Global site tag (gtag.js) - Google Analytics