`
dylan.wu
  • 浏览: 136014 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C/C++语言中sizeof对于数组的一点总结

阅读更多

最近在面试中被问到了几个有关sizeof的问题,自我感觉都回答对了,不过回来实际编写代码试了一下,发现还是错了一个地方,于是总结了一下。

栈中的数组

对于栈中的数组,sizeof给出的会是实际的数组长度,而非指针长度。

#include <string.h>
#include <stdio.h>

int main() {
    char a[5]= "blue";
    char b[ ] = "blue";
    char c[6] = "blue";
    printf("sizeof(a): %d\n", sizeof(a));
    printf("sizeof(b): %d\n", sizeof(b));
    printf("sizeof(c): %d\n", sizeof(c));
    return 0;
}
程序结果
sizeof(a): 5
sizeof(b): 5
sizeof(c): 6
 

指向数组的指针

当是一个指向数组(堆中,栈中或数据区的数组)的指针变量时,sizeof的结果将会是一个指针变量的长度,比如在32位机下将会是4.

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    char ca[ ] = "blue1";
    char *a = "blue1";
    char *b = (char *)malloc(6 * sizeof(char));
    char *c = ca;
    strcpy("blue1", b);
    printf("sizeof(a): %d\n", sizeof(a));
    printf("sizeof(b): %d\n", sizeof(b));
    printf("sizeof(c): %c\n", sizeof(c));
    free(b);
    return 0;
}
    
程序结果
sizeof(a): 4
sizeof(b): 4
sizeof(c): 4

全局变量

对于全局变量中数组,sizeof的处理结果和在栈中的数组一样,会输出其实际的数组长度,而非一个指针变量的长度。对于全局变量中的指向数组的指针sizeof的处理方式为返回一个指针变量的长度。

#include <string.h>
#include <stdio.h>

char a[5]= "blue";
char b[ ] = "blue";
char c[6] = "blue";
char *d = "blue";
char *e = a;

int main() {
    printf("sizeof(a): %d\n", sizeof(a));
    printf("sizeof(b): %d\n", sizeof(b));
    printf("sizeof(c): %d\n", sizeof(c));
    printf("sizeof(d): %d\n", sizeof(d));
    printf("sizeof(e): %d\n", sizeof(e));
    return 0;
}

 

程序结果
sizeof(a): 5
sizeof(b): 5
sizeof(c): 6
sizeof(d): 4
sizeof(e): 4

函数参数

对于函数参数,无论是写成数组形式还是指针形式,sizeof都只会返回一个指针变量的长度。

#include <stdio.h>

void printsize1(char argv[]) {
    printf("%d\n", sizeof(argv));
 }

void printsize2(char *argv) {
    printf("%d\n", sizeof(argv));
}

int main() {
    char a[] = "blue1";
    char *b = "blue1";
    printf("printsize1(a): ");
    printsize1(a);
    printf("printsize2(a): ");
    printsize2(a);

    printf("printsize1(b): ");
    printsize1(b);
    printf("printsize2(b): ");
    printsize2(b);

    return 0;
}
    
 
程序结果
printsize1(a): 4
printsize2(a): 4
printsize1(b): 4
printsize2(b): 4
 
分享到:
评论

相关推荐

    C/C++语言面试题

    在C/C++编程领域,面试题常常...这些知识点展示了C/C++语言的基本特性,包括变量比较、常量定义、数组与指针的异同、面向对象的多态性以及程序控制结构等。在面试中,理解并熟练运用这些概念对于展示编程技能至关重要。

    c/c++ 笔试面试题

    这个问题是关于C/C++语言中数组和指针的概念。这里有六个变量:str1、str2、str3、str4、str5、str6。其中str1、str2、str3、str4是数组,str5、str6是指针。问题是关于这六个变量的比较结果。 根据C/C++语言的规则...

    C/C++笔试题库 (整理版)

    在C/C++语言中,数组的下标范围是从0到n-1,其中n是数组的长度。当数组的下标超过了这个范围时,会导致数组越界问题。例如,在给定的代码中,数组A的下标范围是从0到MAX-1,当i循环到MAX时,A[255]=255;这句代码本身...

    C/C++之数组与指针的艺术

    本文旨在深入探讨C/C++中的两大核心概念——数组与指针,并澄清常见的误区。指针是C/C++编程语言的重要组成部分,它允许程序员直接操作内存地址,从而实现高效且灵活的程序设计。然而,由于其复杂性和与传统思维模式...

    C/C++数组名与指针区别深层探索

    在C/C++编程语言中,指针是一种非常重要的数据类型,它提供了直接访问内存地址的能力。数组名与指针之间存在着密切的关系,但它们并非完全相同。在很多情况下,数组名的行为类似于指向数组第一个元素的指针,这种...

    二分法检索查找 计算机算法 c/c++语言

    在C/C++语言中实现二分法检索查找,需要对编程基础有良好的理解,包括数组操作、条件判断和循环控制。 首先,我们要明确二分法查找的前提条件:待查数组必须是有序的(升序或降序)。在C/C++中,一个简单的二分法...

    C/C++语言中指针的奥秘

    ### C/C++语言中指针的奥秘 #### 指针的概念 在C/C++编程语言中,指针是一个非常重要的概念。简单来说,指针是一个特殊的变量,它的值代表的是另一个变量(对象)在内存中的地址。理解指针需要从四个方面入手:...

    C/C++语言-贪食蛇

    在C或C++语言中实现贪食蛇,可以深入理解这两种语言的基础知识,特别是结构体、指针以及游戏循环等核心概念。下面将详细阐述这些知识点。 1. **结构体(Struct)**:在C/C++中,结构体是一种复合数据类型,它允许...

    C++小知识:C/C++中不要按值传递数组

    C++小知识:C/C++中不要按值传递数组是一篇关于C++编程语言的重要知识点,介绍了在C/C++中不要按值传递数组的原因和解决方法。 在C/C++中,数组不能按值传递给函数。当你试图这样做时,是数组的指针(第一个元素的...

    适合初学者使用的c/c++语言幻灯片教程,理论与实例题4

    C/C++语言是计算机编程的基础,特别适合...理解数组的概念和操作方式对于掌握C/C++语言至关重要,也是进一步学习高级数据结构和算法的基础。通过本教程,初学者能够掌握数组的基本用法,为进一步学习编程打下坚实基础。

    中兴通讯C/C++笔试题及答案

    extern "C"声明用于告诉C++编译器该函数是用C语言编译的,而不是C++语言编译的。这是因为C++编译器可能会将函数名进行名称 mangling,而extern "C"声明可以防止这种情况。 五、内存的思考题 1. void GetMemory...

    在C中如何使函数返回数组

    相比之下,Java等其他编程语言可以直接通过函数返回数组,但在C/C++中,我们通常采用两种方法来实现这一功能。 #### 方法一:返回指向数组的指针 第一种常见的方法是通过返回一个指向数组的指针。这种方法的核心...

    子数和数问题 计算机算法 c/c++语言

    在C/C++编程语言中,解决这个问题通常需要对数组操作、循环、条件判断以及动态规划等基础知识有深入理解。 首先,我们需要了解什么是子数组和子序列。子数组是从原数组中连续取出的部分元素构成的新数组,而子序列...

    C/C++中获取数组长度的方法示例

    在C/C++编程中,获取数组长度是一个常见的需求,但需要注意的是,这两种语言并没有内置的函数可以直接获取数组的长度。通常,我们可以通过两种方式来获取数组的元素个数,即计算数组占用的内存大小除以单个元素的...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    C、C++语言是IT行业的主流编程语言,也是很多程序员必备的软件基本功,是软件开发行业招聘考查的重点。本书以流行的面试题讲解为主要内容,介绍了C、C++语言基本概念,包括保留字、字符串、指针和引用、结构体、...

    经典c/c++笔试面试题汇总

    2. **华为笔试面试题**:华为作为全球知名的科技公司,其笔试和面试题通常涵盖C/C++语言的基本语法、数据结构、算法、操作系统原理等内容,旨在考察候选人的编程基础和解决问题的能力。 3. **嵌入式开发**:嵌入式...

    c/c++面试笔试题目深度解析

    在C/C++面试和笔试中,常常会遇到各种各样的问题,这有助于考察应聘者对这两种编程语言的理解和掌握程度。下面将针对题目中的几个关键知识点进行深入解析: 1. **字符串比较**: - `str1` 和 `str2` 是字符数组,...

    二维数组的动态分配和释放

    在C和C++编程语言中,处理二维数组时经常需要进行动态分配和释放内存。这是因为静态分配的数组大小在编译时就已经确定,而实际应用中往往需要根据运行时的具体情况进行灵活调整。本文将详细介绍在C/C++中动态分配和...

    C/C++学生信息管理系统

    在编程学习的道路上,C/C++语言以其高效、灵活的特点深受广大程序员喜爱,而构建一个简单的信息管理系统则是学习过程中常见且实用的项目。本篇文章将深入探讨如何利用C/C++语言设计并实现一个学生信息管理系统,旨在...

    腾讯的C/C++笔试题

    根据给定的文件标题、描述、标签以及部分内容,我们可以从中提炼出多个与C/C++编程相关的知识点,这些知识点不仅对于准备参加腾讯等大型科技公司笔试的求职者来说至关重要,也是深入理解和掌握C/C++语言的关键所在。...

Global site tag (gtag.js) - Google Analytics