关于sizeof(),指针,数组
#include <iostream>
using namespace std;
int main()
{
char a[6];
char *c;
cout<<sizeof(a)<<endl;
cout<<sizeof(a[6])<<endl;
cout<<sizeof(c)<<endl;
return 0;
}
看这个程序,输出结果是
6
1
4
在印象中,数组名就是一个指针,它的长度怎么不是4,而是整个数组元素的长度。
而sizeof(a[6])的值怎么会反而只有1。
最后,一个警告信息
LINK : warning LNK4076: invalid incremental status file "Debug/test.ilk"; linking nonincrementally
这是为什么啊?
请高手指点一下
[解决办法]
sizeof(数组名)好像是个特例,取整个数组长度,不记得那本书说过了
a[6]就是个char,sizeof(a[6])当然是1
[解决办法]
a[6]不是指针,就是一个char型的数据
数组和指针只有在传参时才是等价的。。。
如题,c++的话指针移动了4个字节,如果一个指针char *p = (char*)(&a+1);那么p-1所指的是a[5],这里的&a+1中的+1实际上是挪了6个char的距离
[解决办法]
误解得原因就是“数组名是个指针”,他不是。sizeof得不同就是其中一个差异
[解决办法]
数组在作为函数参数会退化为指针
但sizeof是操作符,所以还是代表长度为6的char数组
[解决办法]
数组可以作为一个指针传递给函数,但数组本身跟指针有所不同,可以把数组理解为一个指针的派生类,同时重载了sizeof()运算符……哎,OOP果然bo大jing深啊。
[解决办法]
a[6]越界了,只是个内存单元(为1字节)而已,并不是char类型。
sizeof用在数组名上取得元素个数,用在指针上取得相应的指针占用的内存大小。