char arr[1024];
arr++ //move arr to arr+1, error!
我听说char数组的名字是char指针,是吗?
答案 0 :(得分:4)
数组的名称有时会衰减为指向其第一个元素的指针 只要数组类型不合法,但指针类型为,则数组类型的表达式将转换为指针。
你做不到:
arr++;
因为数组是不可修改的l值。
答案 1 :(得分:3)
数组是提供名称的内存块。
将它“增加”是什么意思?这没有任何意义。
指针是内存地址。通过一种方法“递增”它,使其指向后面的元素。
希望这是有道理的。
答案 2 :(得分:1)
数组和指针并不总是可以交换的。一个更有趣的例子来说明数组和指针之间的区别是一个2D数组:
考虑int **a
和int b[3][3]
。
在第一种2D数组方法中,我们在内存中有一维指向1D数组的指针数组(当然你必须动态分配内存才能使用它)。
在实际使用2D C数组的第二种方法中,我们在内存中按顺序排列元素,并且没有存储指针数组的单独位置。
如果您尝试取消引用b
,则会获得指向其第一个元素的指针(即b
转换为int (*)[3]
类型)。
答案 3 :(得分:0)
好吧,当你在那里定义数组时,你已经为数组声明了1024个字节。另外你显然无法改变阵列“base”。
答案 4 :(得分:0)
数组名称适用于与常量指针相同的大多数(但不是全部)目的(不要与指向常量的指针混淆)。因为它是常量,所以不能使用增量运算符++
对其进行修改。有一个很好的答案在an older similar question中更详细地解释了这一点。