在C ++中,char数组的名称和char指针有什么区别?

时间:2011-11-12 08:10:41

标签: c++ c visual-c++

  

可能重复:
  Is array name a pointer in C?

char arr[1024];
arr++ //move arr to arr+1, error!

我听说char数组的名字是char指针,是吗?

5 个答案:

答案 0 :(得分:4)

数组的名称有时会衰减为指向其第一个元素的指针 只要数组类型不合法,但指针类型为,则数组类型的表达式将转换为指针。

你做不到:

arr++;

因为数组是不可修改的l值。

答案 1 :(得分:3)

数组是提供名称内存块

将它“增加”是什么意思?这没有任何意义。

指针是内存地址。通过一种方法“递增”它,使其指向后面的元素。

希望这是有道理的。

答案 2 :(得分:1)

数组和指针并不总是可以交换的。一个更有趣的例子来说明数组和指针之间的区别是一个2D数组:

考虑int **aint b[3][3]

在第一种2D数组方法中,我们在内存中有一维指向1D数组的指针数组(当然你必须动态分配内存才能使用它)。

在实际使用2D C数组的第二种方法中,我们在内存中按顺序排列元素,并且没有存储指针数组的单独位置。

如果您尝试取消引用b,则会获得指向其第一个元素的指针(即b转换为int (*)[3]类型)。

答案 3 :(得分:0)

没什么,除了看起来..

好吧,当你在那里定义数组时,你已经为数组声明了1024个字节。另外你显然无法改变阵列“base”。

答案 4 :(得分:0)

数组名称适用于与常量指针相同的大多数(但不是全部)目的(不要与指向常量的指针混淆)。因为它是常量,所以不能使用增量运算符++对其进行修改。有一个很好的答案在an older similar question中更详细地解释了这一点。