• c/C++计算int / int *数组的长度;sizeof(指针),sizeof(数组名)的区别


    1.计算int *数组长度:

    int arrayVlenth(float *p)
    {
        int len = 0;
        while (*p)
        {
            p++;
            len++;
        }
        return len;
    }
    

     

    sizeof(指针),sizeof(数组名)的区别:

    例子:

    #include<iostream>  
    
    void fun(int *E)  
    {  
        std::cout<<"函数指针形参:"<<sizeof(E)<<std::endl;  
    }  
    int main()  
    {  
        int A[10];  
        int *B = new int[10]; 
        //int *&C = A          //会报错
        int *&D = B;
        std::cout<<"数组名:"<<sizeof(A)<<std::endl;  
        std::cout<<"指针:"<<sizeof(B)<<std::endl;  
        std::cout<<"指针引用:"<<sizeof(D)<<std::endl;  
        fun(A);  
    } 
    

      结果:

    数组名:40 
    指针:8 
    指针引用:8 
    函数指针形参:8
    

      

    当sizeof的参数是数组名时,计算的是整个数组的存储大小;当sizeof的参数是指针时,计算的是指针的大小(8字节,64位系统)。而且,可以定义对指针的引用,但却不能用数组名来作为指针引用的右值,可见数组名和指针还是有区别的。同时,将数组名作为实参传入函数时,因为形参是指针,所以在函数体内的其实是通过数组名初始化的指针形参,故不能在函数中通过 sizeof(指针形参)/sizeof(数组元素类型) 来计算数组长度。所以一般将数组名作为形参传入函数时,也会同时传递一个数组长度的参数。
    以上参考自:https://blog.csdn.net/u012707739/article/details/75732159

    函数通过参数传入一个数组的指针,如何获取该数组的长度?

    如 int InsertSort(int* array)

    其中array的长度如何获取?
    用过sizeof(array) / sizeof(int),始终是1

    注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

    sizeof是在编译阶段展开的一个宏

    错误,函数参数在运行阶段以压栈方式传递了一个地址

    int mylen(int buf[])
    {
     return sizeof(buf) / sizeof(int);
    }

    正确,因为buf的分配过程是在编译阶段定义。
    int main(void)
    {
     int buf[] = {0, 0, 0, 0};
     int l =sizeof(buf) / sizeof(int);
     printf("%d ", l);
     system("pause");
     return 0;
    }

    C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。

    #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

    template<class T>
    int getArrayLen(T& array)
    {
        return sizeof(array)/sizeof(array[0]);
    }


    原文:https://blog.csdn.net/arcticfoxhan/article/details/38752703

  • 相关阅读:
    join命令
    参与者模式
    字符串中的第一个唯一字符
    Git与SVN对比
    惰性模式
    .NET Conf 2020
    使用Github部署Azure应用服务
    Azure Terraform(一)入门简介
    打日志还能打出个线上Bug_ 太难了。。。
    让API并行调用变得如丝般顺滑的绝招
  • 原文地址:https://www.cnblogs.com/lyqf/p/10720090.html
Copyright © 2020-2023  润新知