zoukankan      html  css  js  c++  java
  • sizeof 数组与指针

    在学习指针的时候,得到指针的定义和数组的定义一样,但是这时候就很好奇,指针只是一个地址,那数组和指针一样的话,sizeof时怎么得知其长度呢。

    于是百度了下面的回复:

    千万不要把数组名看成指针,尽管有些时候他们是相通的,但也仅限某些时候而已。

    sizeof是一个奇特的函数,告诉你你也许不相信——sizeof在编译的时候就已经确定sizeof的结果了,这有点类似于宏。

    char str[] = “Hello” ; 
    sizeof ( str );//输出为6


    编译器编译的时候根据上下文完全知道str是一个数组,sizeof (str ) = 6 理所当然是在求数组所占字节数,这个字节数在编译期间就可以确定(数组的大小必须在编译前指定好,C语言规定)

    void *p = malloc( 100 );
    sizeof ( p );//输出为4 

    编译器看到p是个指针,可是谁能保证指针所指内存的大小呢?尽管你这里写着100,但是malloc可是动态分配,没人敢保证malloc一定返回100个字节,甚至比如你不调用malloc,调用一个自己写的函数,编译器总之是无法在编译期间就确定指针所指内存大小的,而sizeof又必须在编译期间知道结果,那好,sizeof只好返回指针本身所占内存的大小,32位机上是4个字节,64位机上是8个字节。



    void Func ( char str[100]) {
        sizeof( str ); //输出为4
    } 

    数组作为参数时,编译器在编译期间一律编译为指针,这样尽管你定义str为数组,实际上在编译器眼里后等同于:

    void Func ( char * str) {
        sizeof( str );//输出为4
    } 


    数组作为参数时,一律被编译器编译为指针。

  • 相关阅读:
    OpenCV中 常用 函数 的作用
    OpenCV中Mat的使用
    awk --- 常用技巧
    Specify 的含义 ------ 转载
    关于CPU CACHE工作机制的学习
    关于CPU Cache -- 程序猿需要知道的那些事
    ARM920T的Cache
    Learn Git and GitHub
    朴素贝叶斯分类器(MNIST数据集)
    k-近邻算法(KNN)识别手写数字
  • 原文地址:https://www.cnblogs.com/zhiyishou/p/4058837.html
Copyright © 2011-2022 走看看