1 关于size_t定义

  size_t是一种数据相关的无符号类型,它被设计得足够大以便能够内存中任意对象的大小。在cstddef头文件中定义了size_t类型,这个文件是C标准库stddef.h头文件的C++版本。

  在需要通过数组下标来访问数组时,通常建议将下标定义size_t类型,因为一般来说在进行下标访问时,下标都是正的。当然,也不是所有的下标访问操作下标都是正的,比如以下代码:

int a[]={,,,,,,,,,};

int * ptr =&(a[]);

cout<<ptr[-]<<endl;

  这段代码中对ptr进行了下标访问,并且下标是负的,但是这个访问并不是错误的,执行的结果是输出3。

2 在Visual Studio2012中查看size_t 的定义

在VS中,选中size_t,右键调出菜单,选择“转到定义”,会自动跳转到size_t的定义位置。在我的机子上,跳到了的文件目录:d:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\crtdefs.h。(这里为什么跳到了crtdef.h这个头文件而不是上面说的cstddef头文件?)

来看看在windows下是如何定义这个size_t的:

#ifndef _SIZE_T_DEFINED

#ifdef  _WIN64

typedef unsigned __int64    size_t;

#else

typedef _W64 unsigned int   size_t;

#endif

#define _SIZE_T_DEFINED

#endif

  如上所示,size_t的定义是和系统相关的。

3 size_t作用

  显然,size_t的取值与机器相关,某些情况下正确的使用size_t可以提高程序的可移植性和有效性。

4 一篇关于size_t的博客:why size_t matters

size_t 类型的更多相关文章

  1. size_t类型

    size_t在C语言中就有了.它是一种“整型”类型,里面保存的是一个整数,就像int, long那样.这种整数用来记录一个大小(size).size_t的全称应该是size type,就是说“一种用来 ...

  2. C语言中size_t类型详细说明【转载】

    来看看网上的一些说法: C语言 size_t到底是个什么东东? 大神求解 . 简单理解为 unsigned int就可以了 . 这是在不同的机器里面的的头文件定义的相应宏定义,实际上是unsigned ...

  3. C语言:size_t类型

    size_t 的全称应该是size type,就是说"一种用来记录大小的数据类型".通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型.因为size_t ...

  4. 把《c++ primer》读薄(3-3 标准库bitset类型)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. //开头 #include <bitset> using std::bitset; 问题1.标准库bitset类型( ...

  5. size_t总结

    1.sizeof返回的必定是无符号整形,在标准c中通过 typedef 将返回值类型定义为size_t. 若用printf输出size_t类型时,C99中定义格式符%zd;若编译器不支持可以尝试%u或 ...

  6. C++ 标准库类型-String,Vector and Bitset

    <C++ Primer 4th>读书摘要 最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合.这些标准库类型是语言组成部分中更基本的那些数据类型(如 ...

  7. C语言指针的长度和类型

    本文地址:http://www.cnblogs.com/archimedes/p/point-length-type.html,转载请注明源地址. 如果考虑应用程序的兼容性和可移植性,指针的长度就是一 ...

  8. C++ Primer : 第十一章 : 关联容器之概述、有序关联容器关键字要求和pair类型

    标准库定义了两种主要的关联容器:map和set map中的元素时一些关键字-值(key-value)对,关键字起到索引的作用,值则表示与索引相关的数据.set中每个元素只包含一个关键字,可以完成高效的 ...

  9. C++ string::size_type 类型【转】

    int main() { string str("Hello World!\n"); cout << "The size of " << ...

随机推荐

  1. LINQ绑定List到GridView

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  2. Codeforces Round #254 (Div. 2) A DZY Loves Chessboard

    先生成nXm的BW棋盘 BWBWBWBW WBWBWBWB BWBWBWBW WBWBWBWB 类似上面交替变换 然后将输入为’-’的地方替换成‘-’即可 #include <iostream& ...

  3. 修复VS,恢复初始状态

    命令提示 输入命令: devenv.exe /resetuserdata 处理版本221优化改动:1.SQL优化,采用预编译方式并将SQL语句修改为大写,尽量减少Oracle数据库硬解析2.复用部分代 ...

  4. Flume_初识

    企业架构 数据源 webserver RDBMS 数据的采集 shell.flume.sqoop job 监控和调度 hue.oozie 数据清洗及分析 mapreduce.hive 数据保存 sqo ...

  5. 初用idea建立javaweb遇到的问题与心得

    1.直接用idea建立的web项目,其自动生成的web.xml里version=3.1,这样的话建立servlet-name等标签会报错(因为3.1不支持这种做法,更提倡用注解的办法),解决办法是将w ...

  6. *HDU2510 DFS

    符号三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. 解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法

    方式一:Coding JavaScript <!--[if lt IE9]> <script> (function() { var e = "abbr, articl ...

  8. USACO翻译:USACO 2014 US Open 三题

    USACO 2014 US Open 一.题目概览 中文题目名称 牧场装饰 里程表 牛像展览 英文题目名称 decorate odometer fairphoto 可执行文件名 decorate od ...

  9. SQL日期相关的操作

    DECLARE @dt datetime SET @dt=GETDATE() DECLARE @number int --1.指定日期该年的第一天或最后一天 --A. 年的第一天 ),)+'1-1' ...

  10. curl 传递用户session

    $cmh = curl_multi_init(); $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch, CU ...