首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么sizeof("")等于1而sizeof(NULL)相当于c语言中的4?

sizeof("")等于1是因为C语言中的字符串常量是以空字符'\0'结尾的字符数组,而""表示一个空字符串,即只有一个空字符'\0'。因此,sizeof("")返回的是字符串常量的长度,即1。

而sizeof(NULL)相当于C语言中的4是因为NULL在C语言中被定义为一个空指针常量,通常被表示为0。在32位系统中,指针的大小为4个字节,因此sizeof(NULL)返回的是指针的大小,即4。

需要注意的是,sizeof("")和sizeof(NULL)返回的结果并不是字符串或指针本身的长度,而是它们所占用的内存空间的大小。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C语言基础】:深入理解指针(二)

指针 ± 整数 在C语言中,我们知道数组在内存中是连续存放的,所以我们只要知道了数组第一个元素的地址,就可以顺藤摸瓜找到后面元素的地址。...如何避免野指针 指针初始化 如果明确知道指针指向哪里就直接赋值地址,如果不知道指针应该指向哪里,可以给指针赋值NULL, NULL 是C语言中定义的一个标识符常量,值是0,0也是地址,这个地址是无法使用的...= NULL) 上面代码在程序运行到这一行语句时,验证变量 p 是否等于 NULL 。如果确实不等于 NULL ,程序 继续运行,否则就会终止运行,并且给出报错信息提示。...五、指针与数组 5.1 数组名的理解 在C语言中,数组名是数组首元素的地址,但是经过实验会发现有两个例外 一个就是sizeof(数组名),sizeof中单独放数组名,这里的数组名表示整个数组,计算的是整个数组的大小...数组名加一在地址上显示增加了四个字节,而&数组名加一后却增加了四十个字节,这是为什么呢?

11510

C语言:(动态内存管理)

有时候我们需要的空间⼤⼩在程序运⾏的时候才能知 道,那数组的编译时开辟空间的⽅式就不能满⾜了。 C语⾔引⼊了动态内存开辟,让程序员⾃⼰可以申请和释放空间,就⽐较灵活了。...malloc函数 开辟空间函数需要的头文件 #include 内存开辟的空间都是在堆区上的 C语⾔提供了⼀个动态内存开辟的函数: void* malloc(size_t size);...C语⾔提供了另外⼀个函数free,专⻔是⽤来做动态内存的释放和回收的,函数原型如下: void free(void* ptr); free是用来释放动态开辟的内存。...int* ret = (int*)realloc(p, 20 * sizeof(int)); //要判断是不是NULL,如果不判断,又等于NULL,则会把旧空间的数据全部赋值空 if (ret...free(p); p = NULL; return 0; } 动态内存开辟的空间忘记释放(内存泄露) 当在函数里开辟了100个字节的空间,a等于1提前返回了,没有释放空间 后面还有很多代码

8310
  • C语言(2)----数据类型、变量以及操作符

    1.数据类型介绍 数据类型是c语言中用来描述生活中各种数据的一种分类,例如年龄,体重等等。...1byte=8bit,而在计算机语言中,1bit就相当于一个进制位,即1or0.所以1byte相当于8个进制位。 再返回到sizeof,sizeof 操作符的操作数可以是类型,也可是变量或者表达式。...sizeof 运算符的返回值,C 语⾔只规定是⽆符号整数,并没有规定具体的类型,⽽是留给系统⾃⼰去决定, sizeof 到底返回什么类型。...这样不利于程序的可移植性。 C 语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的返 回值类型。...(1) 局部变量是放在内存的栈区 (2)全局变量是放在内存的静态区 (3) 堆区是⽤来动态内存管理的 6.算术操作符 在c语言中也会有加减乘除这样的算术方式,而且它与正常的加减乘除差别有,却不是很大。

    11710

    C语言:数组-学习笔记(万字笔记)——翻新版

    sizeof函数是 C 语言和 C++语言中的一个运算符,用于计算数据类型或变量占用的内存字节数。 不知道大家有没有对 %zd\n" 有所疑惑,为什么这里要使用%zd 呢?...3.1 数组下标 C语⾔规定数组是有下标的,下标是从 0 开始的,假设数组有 n 个元素,最后⼀个元素的下标是 n-1,下标就相当于数组元素的编号,如下: int arr[10] = {1,2,3,4,5,6,7,8,9,10...这个书架上一格一格地摆放着很多书,每一格就相当于数组中的一个元素。 而下标呢,就像是每一格的编号。...辅助理解: 我们可以把 C 语言中的内存想象成一个超级大的停车场。 这个停车场被划分成了一个个的停车位,每个停车位就相当于一个内存单元,而每个停车位的大小是 1 个字节。...C语⾔规定,二维数组的行是从0开始的,列也是从0开始的,如下所示: 1 int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7}; 图中最右侧绿⾊的数字表示行号

    14010

    一文带你了解c++和c中字符串的使用

    一、c++中的字符串表示形式: 有可能有些网友还没怎么接触到c++(c++它是一门面向对象的语言,而c是一门面向过程的语言,所以这里可能没接触过那个面向对象的网友不习惯这个用法,不过还是建议至少要掌握一门面向对象的语言...(0等于'\0','0'等于48) 2、c++中的字符串表示:       在c++中我们要定义一个字符串的话,我们使用string来定义: string str="linux"; 二、c语言里面的字符串如何来使用呢...下面就用实际代码来讲解它的具体表示: 1、字符数组初始化与sizeof、strlen:      (1)sizeof是C语言的一个关键字,也是C语言的一个运算符(sizeof使用时是sizeof(类型或变量名...为什么需要sizeof?...字符数组本身是数组,数组自身自带内存空间,可以用来存东西(所以数组类似于容器);而字符串本身是指针,本身永远只占4字节,而且这4个字节还不能用来存有效数据,所以只能把有效数据存到别的地方,然后把地址存在

    76120

    C语言编程—内存管理

    C语言中的动态内存管理。C语言为内存的分配和管理提供了几个函数。这些函数可以在 头文件中找到。 在C语言中,内存是通过指针变量来管理的。...*/ description = (char *) realloc( description, 100 * sizeof(char) ); if( description == NULL...C 语言中常用的内存管理函数和运算符 malloc() 函数:用于动态分配内存。它接受一个参数,即需要分配的内存大小(以字节为单位),并返回一个指向分配内存的指针。...为什么多用malloc而很少用calloc?...因为calloc虽然对内存进行了初始化(全部初始化为0), calloc相当于 p = malloc(); memset(p, 0,size); 相对于malloc多了对内存的写零操作,而写零这个操作我们有时候需要

    25930

    C语言的数据类型和变量-学习笔记

    前言: 为什么我们要学习编程?为什么要写代码? 今天上课时,老师和我们说学习编程和代码是为了解决未来生活中的问题,写出的代码是为了能够描述现实世界。欧克,接下来将和大家一起学习C语言相关知识。...C语言中的数据类型和变量是程序设计的基础,理解它们对于编写正确的程序至关重要。...int是4个字节,而short是2个字节。因此最终打印在屏幕上的结果便为2。...4、变量 4.1 变量的创建 了解清楚了类型,我们使用类型做什么呢?类型是用来创建变量的。 什么是变量呢?C语言中把经常变化的值称为变量,不变的值称为常量。...<<= 4 &= |= ^= 6.2.1 += 、 -= 1 int a = 10; 2 a+=20; => a = a+20 //此时得出的结果是a等于30 3 4 a-=10;

    7710

    【C语言】指针详解(一)

    在C语言中给地址起了新名叫:指针 所以我们理解的:内存单元的编号 == 地址 == 指针 2.指针变量与地址 2.1 取地址操作符& 在C语言中创建变量其实就是在向内存申请空间。...char b = 'a'; char* p = &b; 2.4 解引用操作符 在C语言中,我们找到地址,就可以对地址所指向的对象,而此时所要用到的就是解引用操作符(*)。...int arr[]={1,2,3,4,5}; 而所对应的下标为0,1,2,3,4。...是C语言中定义的一个标识符常量,值是0,0也是地址,这个地址是无法使用的,读写该地址会报错。...= NULL); 代码在程序运行到这一行语句时,验证变量 p 是否等于 NULL 。如果确实不等于 NULL ,程序继续运行,否则就会终止运行,并且给出报错信息提示。

    16210

    C:03---运算符优先级

    C语言随机数函数 int a=rand()%10; //产生0~9之间的随机数,就是上面的原理 三、*运算符的注意事项 在C语言中,要尽量少用*,特别是在硬件开发中 因为对于*来说,CPU可能要运行多个周期...而+、-等运算符,CPU只需要一个周期 四、++,-- 自增自减运算符 这里区别于指针的++和--, --(++)变量 表示变量先-1(+1),再返回表达式的值。...: test 1 a:2 b:2 test 2 a:2 b:2 a:2 b:1 六、sizeof 运算符 有人听到sizeof是运算符可能会大吃一惊,实际上在我开始学习C的时候,误认为sizeof...", sizeof NULL); return 0; } 你算下结果是不是和你想的一样,如果不一样,为什么呢,如果有不明白的可以在留言板或者聊天频道给我留言哈。...“2的n次方” 演示案例: #include int main() { int a = 8; // 相当于8*(2的2次方) = 8*4 =32 printf("%d\n",

    55910

    C++学习笔记---------基础知识sizeof用法

    sizeof(a=3)<<endl; cout<<a<<endl;    输出为什么是4,0而不是期望中的4,3???...=操作符返回左操作数的类型,所以a=3相当于int,而代码也被替换为: int a = 0; cout4<<endl; cout<<a<<endl;    所以,sizeof是不可能支持链式表达式的...c语言中判断数据类型长度符 用法       sizeof(类型说明符,数组名或表达式); 或       sizeof 变量名 1....数组的sizeof 数组的sizeof值等于数组所占用的内存字节数,如: char a1[] = "abc"; int a2[3]; sizeof( a1 ); // 结果为4,字符 末尾还存在一个NULL...Why为什么受伤的总是我 请不要沮丧,我们来好好琢磨一下sizeof的定义——sizeof的结果等于对象或者类型所占的内存字节数,好吧,那就让我们来看看S1的内存分配情况: S1 s1 = { 'a',

    56310

    【C语言篇】深入理解指针1

    C语⾔中给地址起了新的名字叫:指针。...指针变量和地址 取地址操作符 理解了内存和地址的关系,我们再回到C语⾔,在C语⾔中创建变量其实就是向内存申请空间,⽐如: ⽐如,上述的代码就是创建了整型变量a,内存中申请4个字节,⽤于存放整数10,其中每个字节都有地址...NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址会报错 #include int main() { int num = 10;...= NULL); 上⾯代码在程序运⾏到这⼀⾏语句时,验证变量 p 是否等于 NULL 。如果确实不等于 NULL ,程序 继续运⾏,否则就会终⽌运⾏,并且给出报错信息提⽰。...写在最后 C语言指针是一个重头戏,关于指针的内容会有4-5篇博客,敬请期待喔 以上就是关于深入理解指针1的内容啦,各位大佬有什么问题欢迎在评论区指正,您的支持是我创作的最大动力!❤️

    12910

    【C语言系列】深入理解指针(1)

    前言总所周知,C语言中指针部分是非常重要的,这一件我们会介绍指针相关的内容,当然后续我还会出大概4篇与指针相关的文章,来深入的讲解C语言指针部分,希望能够帮助到指针部分薄弱或者根本不会的程序员们,后续文章尽情期待...,C语言中给地址起了新的名字叫:指针,即指针的本质就是地址,也就是内存单元的编号。...C语⾔中其实也是一样的,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)指向的对象,这里使用的操作符叫解引用操作符(*)。...NULL 是C语言中定义的一个标识符常量其值为0,0也是地址,这个地址是无法使用的,读写该地址会报错。...= NULL);//验证变量p是否等于NULL。上面代码在程序运行到这一行语句时,验证变量p是否等于NULL 。如果确实不等于继续运行,否则就会终止运行,并且给出报错信息提示。

    11110

    【C语言】常用函数汇总表

    1. C语言常用函数汇总表(概念功能) 以下是每个函数的概念功能和使用,按类别分类并以表格表示。...double c = cos(0.0); tan 计算弧度的正切值,返回结果。 double t = tan(3.14159 / 4); log 计算自然对数,返回结果。...double num = (double)intVar; 通过这些表格和示例,你可以掌握C语言中各类常用函数的功能和使用方法。如果你需要进一步深入了解某个函数或需要更多示例,随时告诉我! 2....这段代码演示了如何在C语言中使用多种常用函数和布尔类型。通过这些示例,您可以更好地理解C语言的基本功能和标准库函数的用法。 3....结束语 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言中常用函数有了更深入的理解和认识。 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。

    23510

    【C语言指南】sizeof与strlen的使用及其区别

    一、 sizeof 1. sizeof简介 sizeof是一个编译时运算符,可用于任何变量名、类型名或常量值,当用于变量名或常量时,它不需要用圆括号。 它在编译时起作用,而不是运行时。...返回值是size_t 类型 在printf函数中使用%zd打印 sizeof 运算符的返回值,C语⾔只规定是⽆符号整数,并没有规定具体的类型,⽽是留给系统⾃⼰去决定, sizeof 到底返回什么类型...这样不利于程序的可移植性。 C语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的返回值类型。...sizeof的使用注意事项 至于为什么说sizeof是在编译时起作用,可以通过下面这个计算表达式的例子来证明 #include int main() { short s = 2;...而strlen的计算结果会变得不可控,因为strlen只有遇到\0才会停下,此时当然是一个随机值 四、总结 sizeof和strlen函数在C语言中都用于计算大小,但它们计算的内容不同。

    22510

    c语言基础学习04_条件判断语句

    例如:   #define MAX 100 说明定义的MAX是一个有符号的int   const long a = 100u; 说明定义的a是一个无符号的long   "a"字符串常量 相当于...'a' '\0'   'a'字符常量,字符常量只能是一个ASCII字符   int 4个BYTE、2个WORD 、1个DWORD   c语言中不能直接书写二进制,用8进制和16进制来替代(和默认的十进制...int a = 100;   int b = sizeof(a); sizeof 关键字 作用是:得到某一数据类型在内存中占用的大小(内存大小没有负的),单位是:字节   sizeof 不是函数,...======== 条件分支语句: 1、关系运算符:在c语言中0代表false,非0代表真。...关系运算符有:(大于)、等于)、>=(大于等于)、==(等于)、!

    1.3K10

    完全合并C++面试题

    ————————————————————————– 6.以下是C语言中两种if语句推断方式。请问哪种写法更好?为什么?...从名称上也能够看出,c++比c多了+,说明c++是c的超集;那为什么不叫c+而叫c++呢,是由于c++比 c来说扩充的东西太多了,所以就在c后面放上两个+。...于是就成了c++ C语言是结构化编程语言,C++是面向对象编程语言。 C++側重于对象而不是过程,側重于类的设计而不是逻辑的设计。...size最大的为union的size 解析C语言中的sizeof 一、sizeof的概念    sizeof是C语言的一种单目操作符,如C语言的其它操作符++、–等。...return 1; } sizeof(func(“1234”))=4//由于func的返回类型为int。所以相当于 //求sizeof(int).

    37320

    【C语言】深入解开指针(二)

    printf("%d ", *pa); pa++; } return 0; } 三、野指针 在 C 语言中,野指针是指未被初始化的指针。...指针指向的空间释放 在C语言中,当一个指针指向一个函数中分配的内存空间时,如果在该函数返回之前释放了该内存空间,那么这个指针就成为了一个野指针。...NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址 会报错。...= NULL); p 是否等于 NULL 。如果确实不等于 NULL ,程序继续运⾏,否则就会终⽌运⾏,并且给出报错信息提⽰。 assert()宏接受一个表达式作为参数。...b的值,不过x的地址和a的地址不⼀样,y的地址和b的地址不⼀样,相当于x和y是独⽴的空间,那么在Swap1函数内部交换x和y的值,⾃然不会影响a和b,当Swap1函数调⽤结束后回到main函数,a和b的没法交换

    11810

    C++:05---class和struct

    3、关于大括号初始化问题 struct在C语言中: 在C语言中,我们知道struct中是一种数据类型,只能定义数据成员,不能定义函数,这是因为C语言是面向过程的,面向过程认为数据和操作是分开的,所以C语言中的...如果 Class A; A obj; 那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象的大小大于等于所有非静态成员大小的总和。...为什么是大于等于而不是正好相等呢?...如果在类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针指向虚函数表VTable,在32位机器上,一个对象会增加4个字节来存储此指针,它是实现面向对象中多态的关键...(a)1 coutsizeof(b)1 //对象c扩充为2个字,但是对象b为什么没扩充为1个字呢(空类的对象一个字节,含一个

    77830

    一篇文章完全讲解C语言指针

    而且在C语言中,并不是所有的内存数据都有名称,例如使用malloc申请的堆内存就没有。 4、内存数据的地址 如果一个类型占用的字节数大于1,则其变量的地址就是地址值最小的那个字节的地址。...在C语言中,我们让指针变量赋值为NULL表示一个空指针,而C语言中,NULL实质是((void*)0),就像前面说的指针可以理解成特殊的int,它总是有值的,p=NULL,其实就是p的值等于0。...C语言中,实参传递给形参,是按值传递的,也就是说,函数中的形参是实参的拷贝份,形参和实参只是在值上面一样,而不是同一个内存数据对象。...另外我们为什么要使用指针而不是直接传递Student变量呢?...指针常用在C语言中,而引用,则用于诸如Java,C#等 在语言层面封装了对指针的直接操作的编程语言中。

    1K20

    c语言中malloc的作用,malloc函数-malloc函数,详解

    printf(“%d%d%d\n”, sizeof(p[0]),sizeof(p[1]),sizeof(p[2])); //为p数组分配三个元素输出为4 4 4,那不是有12个字节了吗?...malloc分配空间,是指系统按照的你程序在内存堆栈中分配一段内存给你,而该内存段的首地址赋值给你的p,这是基本的指针概念,为什么要强调这个?...C语言中malloc函数的使用方法 如题,知道的告诉下,谢谢。...C语言中,malloc函数动态分配内存后,函数结束后不会释放,程序结束后会由系统释放,相当于在堆区人为开辟了静态区域(占用的是堆区的空间),如果有重复分配(循环),会不断占用内存,直到程序结束。...malloc函数返回值 int *d = (int *)malloc(10 * sizeof(int)); int **d = malloc(rows * sizeof(int *)); 1、这里为什么第一条语句就用

    2.3K30
    领券