sizeof运算符
Sales_data data,*p;//p为无效指针,没有为其分配内存空间
sizeof p;//指针所占空间大小
指针所占空间大小由操作系统是几位决定,32位则4位字节(4*8=32),64位则8位
sizeof *p;//即sizeof(Sales_data)
无效指针也可以用sizeof,返回指向对象类型的大小,!!!记住sizeof(除数组,string,vector)始终求类型大小
sizeof Sales_data::revenue;//求类成员大小,c++11新标准 可用::写
constexpr size_t sz=sizeof(ia)/sizeof(*ia);//求数组元素个数
所得值为size_t类型(足够大,表示表示在内存中的数)的常量表达式
vector sizeof为什么是是固定大小的简单解释
深入解释需要更了解stl源码,先留下疑问
简单解释是vector由三个指针控制,这三个指针的大小就为其固定大小
#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
//指针占4位,应为32位
vector<int> v={1,2,3,4,5};
cout<<sizeof(int)<<" "<<sizeof v<<endl;//输出4,12(3*4)并不是5*4
return 0;
}
练习题
4.29
10 元素个数
1 p指向首元素 *p是int类型而不是整个数组,4/4=1(与103页问题一致,有时间整理)
#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
int x[10]={1,2,3,4,5,6,7,8,9,10};
int *p=x;//指向首元素
cout<<sizeof(p)<<endl;
cout<<sizeof(p)/sizeof(*p)<<endl;//指针占4位,int占四位
cout<<*p<<endl;//输出为1
return 0;
}
4.30
sizeof > +
-> > sizeof
sizeof > <
() > sizeof ()函数调用符
(sizeof x)+y
sizeof(p->mem[i])
(sizeof a)<b
sizeof (f())
4.31 此题用前置后置都可以,但为了效率,尽量用前置
4.32 对数组进行遍历,用ix和ptr都可以
4.33 ,的优先级最低,所以
(somevalue ? ++x,++y:--x),--y
先判断somevalue真值:true ++x ++y
false --x
后--y
待整理
1.vector固定大小深入理解
2.*p=arry *p=&arry p++