`

指针的大小--sizeof问题

    博客分类:
  • C++
 
阅读更多
指针的大小是问:一个指针变量占用多少内存空间?

分析:既然指针只是要存储另一个变量的地址,。注意,是存放一变量的地址,而不是存放一个变量本身,所以,不管指针指向什么类型的变量,它的大小总是固定的:只要能放得下一个地址就行!(这是一间只有烟盒大小的“房间”,因为它只需要入一张与着地址的纸条)。

存放一个地址需要几个字节?答案是和一个 int 类型的大小相同:4字节。

所以,若有:

int* pInt;

char* pChar;

bool* pBool;

float* pFloat;

double* pDouble;

则: sizeof(pInt)、sizeof(pChar)、sizeof(pBool)、sizeof(pFloat)、sizeof(pDouble)的值全部为:4。

PS:你敢拆电脑吗?拆开电脑,认得硬盘数据线吗?仔细数数那扁宽的数据线由几条细线组成?答案:32条,正是 4 * 8。

附:sizeof和strlen的区别
❀第一个例子:
char* ss = "0123456789";
1、sizeof(ss)的结果是4,ss是指向字符串常量的字符指针
2、sizeof(*ss)的结果是1,*ss是第一个字符

❀第二个例子:
char ss[] = "01233456789";
1、sizeof(ss)结果是11,ss是数组,计算到'\0'的位置,因此是10+1
2、sizeof(*ss)结果是1,*ss是第一个字符

❀第三个例子
char ss[100] = "0123456789";
1、sizeof(ss)的结果是100,ss表示在内存中预分配的大小:100*1
2、strlen(ss)的结果是10,它的内部实现是用一个循环计算字符串的长度,直到'\0'为止。

❀第四个例子
int ss[100] = "0123456789";
1、sizeof(ss)的结果是400,ss表示在内存中的大小,为100*4
2、strlen(ss)错误,strlen的参数只能是char*,且必须是以'\0'结尾的。
注:笔者试验时无法对ss初始化
error message:
error C2075: 'ss' : array initialization needs curly braces
分享到:
评论

相关推荐

    个人整理sizeof()用法汇总

    对于静态数组,sizeof可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于4*10=40; sizeof(b)等于6; 注意:数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4}

    c++ 面试题 总结

    如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量; 如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。 (1)const char *p 一个指向char类型的const对象指针,...

    C语言学习中的指针运算部分笔记

    void的指针可以指向任意的...所有类型指针变量的大小都一样 4个字节,因为地址范围是一样的。 指针与整数的加减法运算是移动指针位置。 pnID+(-)n pnID+(-)n*sizeof(指针指向类型) 加:向后移动;减:向前移动。

    sizeof 和strlen 区别.pdf

    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,...

    操作系统课程设计报告 操作系统 课程设计

    课程设计报告 1.需求分析 1.1 程序的功能 用二进制文件空间模拟磁盘空间,用文件块操作模拟磁盘块操作。 实现如下文件系统功能(过程或...char fillchar[DirSize-4*sizeof(int)-sizeof(long int)-11]; /*填充字节*/

    11.第十一章 指针.txt

    (3)类型:为int,决定该变量能参加的运算,决定了其占用空间的大小(从起始地址开始占用的连续字节数),占用空间的大小用sizeof运算符计算,sizeof(i)或sizeof(int)。 变量的指针就是变量的地址,存放变量地址...

    Sizeof与Strlen的区别与联系

    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 strlen(...)是函数...

    详解C++编程中的sizeof运算符与typeid运算符

    sizeof 运算符 产生与 char 类型的大小有关的操作数大小。 语法 sizeof unary-expression sizeof ( type-name ) 备注 sizeof 运算符的结果为 size_t 类型,它是包含文件 STDDEF.H 中定义的整数类型。利用此运算符...

    sizeof()简介

    C语言中,简述了sizeof函数的用法,其中主要阐述了对于各种数据类型,以及指针的测试大小。

    malloc函数的声明

    malloc函数的声明及参数和返回值 描述 C 库函数 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。 参数 size -- 内存块的大小,以字节为单位。...此时p为指向内存大小为一个int类型的指针

    文件系统代码

    const int BlockFcbCount = BlockSize/sizeof(FCB);//目录文件的最多FCB数 int OpenFileCount = 0; struct OPENLIST //用户文件打开表 { int files; //当前打开文件数 FCB f[OPEN_MAX]; //FCB拷贝 OPENLIST() ...

    c++面试题题目集锦

    5)sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof 指针得到的是指针本身的大小。 6)引用访问一个变量是直接访问,而指针访问一个变量是间接访问。 7)使用指针前最好做类型检查,防止野指针的出现; 8)...

    《你必须知道的495个C语言问题》

    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...

    C++中this指针用法详解及实例

    因为this指针不是对象本身,因此sizeof函数并不能用于确定this指针所对应的对象大小。this指针的具体类型与具体对象的类型以及对象是否被const关键字修饰 有关。例如,在类Employee的非常量函数中,this指针类

    基于Sizeof与Strlen的区别以及联系的使用详解

    一、sizeof sizeof(…)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在...

    C语言中sizeof()与strlen()的区别详解

    1. sizeof()【操作数所占空间的字节数大小】是一种c中的基本运算符。 可以以类型、指针、数组和函数等作为参数。 头文件类型为unsigned int。 运算值在编译的时候就出结果,所以可以用来定义数组维数。 char a[5]=...

    你必须知道的495个C语言问题.pdf

    作者在网络版CFAQ列表的基础上进行了大幅度的扩充和丰富,结合代码示例,权威而且详细深入地解答了实际学习和工作中最常遇到的495个C语言问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等...

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    c++中引用和指针的区别和联系

    C++中的引用和指针 ★ 相同点: 1. 都是地址的概念;指针指向一块内存,它的内容是...6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;type

Global site tag (gtag.js) - Google Analytics