数组和指针的细微区别
#include <iostream>
using namespace std;
//sizeof的指针运算值相关
int GetSize(int data[]){
return sizeof(data);
}
int main() {
int list[] = {1,3,36,56,76,34,61,76,12,4};// array of 10 elements
int list_size = sizeof(list);
int *list2 = list;
int size2 = sizeof(list2);
int size3 = GetSize(list);
cout<<list_size<<endl;
cout<<size2<<endl
<<size3;
return 0;
}
/**
* 分析:
* list_size是一个数组,sizeof(list_size)是求数组的大小,这个数组包含10个整数,每个整数占4个字节,因此是40个字节。
* size2声明为指针,尽管它指向list,但是它的本质还是一个指针,在32位系统中对任意指针求sizeof,得到的结果都是4.
* size3。在C/C++中当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针,size3的结果仍为4
*/
输出结果:
40
4
4
字符串相关:(完美笔试)
#include <iostream>
using namespace std;
//字符串相关的sizeof
void func(char p[10])
{
printf("%d\n",sizeof(p)); // 4
}
void func(char (&p)[10])
{
printf("%d\n",sizeof(p)); // 10
}
int main(void)
{
char array[] = "abcdefg";
printf("%d\n",sizeof(array)); // 8
char *p = "abcdefg";
printf("%d\n",sizeof(p)); // 4
printf("%d\n",sizeof(char[2])); // 2
printf("%d\n",sizeof(char&)); // 1
return 0;
}
输出:
8
4
2
1
函数:
#include <iostream>
using namespace std;
class CBase{
public:
void func(){
Print();
}
virtual void Print(){
cout<<"CBase::Print"<<endl;
}
};
class CDerived:public CBase{
public:
virtual void Print(){
cout<<"CDerived::Print"<<endl;
}
};
int main(void)
{
CDerived c;
CBase *p = &c;
cout<<sizeof(*p)<<endl; // 4
cout<<sizeof(p)<<endl; // 4 sizeof(指针) == 4
cout<<sizeof(c)<<endl; // 4
return 0;
}