使用sizeof()计算数组长度

char *words[] = {"stately","plump","buck","mulligan","make"};
//计算word中元素个数
size_t words_size = sizeof(words)/sizeof(char*);
//使用数组初始化words2(指针初始化)
list<string> words2(words,words+words_size);

解析
1、sizeof()
sizeof操作符返回一个对象类型名的长度,返回值类型为size_t, 长度单位为字节。 有如下三种语法形式
sizeof(type name);
sizeof(expr);
sizeof expr;
sizeof用于expr上,将获得该表达式的结果的类型长度

Sale_item item, *p;
// 三种方式获取对象类型sales_item的大小
sizeof(Sale_item);//  取得对象类型 Sale_item的大小
sizeof item;  //item类型的大小, 即sizeof(Sale_item)
sozeof *p;    //p 指向类型的大小 即sizeof(Sale_item)

将sizeof用于 expr是并没有计算expr的值。特别是在sizeof *p中,指针p可以是一个无效地址,因为不需要对p做解引用操作。
● 对char类型或值为char类型的表达式做sizeof操作结果为1.
●对引用类型做sizeof操作,将返回存放此引用类型对象所需的内存空间大小。
●对指针做sizeof操作,将返回存放指针所需的内存大小,注意,如果要获取该指针指向对象的大小,则必须对该指针进行解引用。
●对数组做sizeof操作等效于对其元素做sizeof操作的结果乘上数组元素的个数。

因为sizeof返回整个数组在内存中的存储长度,所以用sizeof数组的结果初一sizeof其元素类型的结果,即可求出数组元素的个数:
int sz = sizeof(ia)/sizeof(*ia);

通常将8位的块作为一个字节,32位或4个字节作为一个 “字”。一般的short为半个机器字长,int为一个机器字长。

你可能感兴趣的:(基础知识)