zoukankan      html  css  js  c++  java
  • size_t 类型

    size _t 为了增强程序的可移植性,便有了size_t ,不同系统上,定义size_t可能不一样。

    经测试发现,在32位系统中size_t是4字节的,在64位系统中,size_t是8字节的,这样利用该类型可以增加程序移植性。

    size_t的定义 

    它的定义在/usr/include/linux/types.h

                        typedef _kernel_size_t size_t;

    跟体系结构相关                           

    而__kernel_size_t 定义在 /usr/include/asm/posix_types.h                          

    安装的是内核的源码

    asm-i386/posix_types.h

                  typedef unsigned int __kernel_size_t;

    asm-1a64/posix_types.h

                  typedef unsigned long kernel_size_t;

    size_t一般用来表示一种计数,比如有多少东西被拷贝等。例如:sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最 大对象的字节大小。 它的意义大致是“适于计量内存中可容纳的数据项目个数的无符号整数类型”。所以,它在数组下标和内存管理函数之类的地方广泛使用。

    size_t的定义位置?

    百度百科的解释?

    size_t在C语言中就有了。
    它是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。
    通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型。
    因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。

    类似的还有wchar_t, ptrdiff_t。
    wchar_t就是wide char type,“一种用来记录一个宽字符的数据类型”。
    ptrdiff_t就是pointer difference type,“一种用来记录两个指针之间的距离的数据类型”。

    示例代码:
    int i;                   // 定义一个int类型的变量i
    size_t size = sizeof(i); // 用sizeof操作得到变量i的大小,这是一个size_t类型的值
                             // 可以用来对一个size_t类型的变量做初始化
    i = (int)size;           // size_t类型的值可以转化为int类型的值


    char c = 'a';       // c保存了字符a,占一个字节
    wchar_t wc = L'a';  // wc保存了宽字符a,占两个字节。注意'a'表示字符a,L'a'表示宽字符a


    int arr[] = {1, 2, 3, 4, 5}; // 定义一个数组
    int* p1 = &arr[0];           // 取得数组中元素的地址,赋值给指针
    int* p2 = &arr[3];
    ptrdiff_t diff = p2 - p1;    // 指针的减法可以计算两个指针之间相隔的元素个数
                                 // 所得结果是一个ptrdiff_t类型
    i = (int)diff;               // ptrdiff_t类型的值可以转化为int类型的值


    通常,size_t和ptrdiff_t都是用typedef来实现的。你可能在某个头文件里面找到类似的语句:
    typedef unsigned int size_t;
    typedef int ptrdiff_t;
    而wchar_t则稍有不同。在一些旧的编译器中,wchar_t也可能是用typedef来实现,但是新的标准中wchar_t已经是C/C++语言的关键字,wchar_t类型的地位已经和char, int的地位等同了。

  • 相关阅读:
    建站两个月,说说我的想法
    我见过的郭弃疾先生(兰亭集势CEO)
    C#数组和集合互相转换的几种方法的效率分析
    (五)React Ant Design Pro + .Net5 WebApi:后端环境搭建Autofac注入+ 泛型仓储
    关于C++中对私有的测试总结
    uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型(转)
    GDB调试
    linux删除乱码文件
    转:C++ nan
    vim
  • 原文地址:https://www.cnblogs.com/johnnyflute/p/3535970.html
Copyright © 2011-2022 走看看