zoukankan      html  css  js  c++  java
  • C Array length function problem C / C++

    C Array length function problem - C / C++


    C Array length function problem
    2n2is5
    P: 2
       
    2n2is5

    I've been experimenting with arrays, and I have just found the simple way to find the length of an array. I attempted to make this a function with the specific array as the only argument. It didn't work. I thought it was bad coding; but, after a while, I got fed up and put the same code in both the main() and the function. Like so

    Expand|Select|Wrap|Line Numbers

        int getLength(int *myarray);
        int main(void)
        {
            int myarray[]={5,4,3,2,1};
            int size1=(sizeof(myarray) / sizeof(myarray[0]));
            int size2=int_getLength(myarray);
            printf("%d and %d should be the same",size1,size2);
            return 0;
        }
        int getLength(int *myarray)
        {
            return (sizeof(myarray) / sizeof(myarray[0]));
        }
        

    size1,main, prints to be 5, which is the correct length.


    size2, function, prints 1.


    I don't know why this is happening. I have also tried using (int myarray[])as the parameter, but the output is the same.


    My logical assumption would be that the function is only passing in the first element of the array or it could do something with obtaining the length. Can someone please explain why this is happening.
    Post Reply

    Feb 9 '08
    #1

    Share this Question
    Share on Google+
    3 Replies

    Ads by Google
    免费下载《一周商务英语》
    www.englishtown.com/EF
    期待事业更上一层楼?从此沟通更轻松! 助你熟练掌握商务英语交流术。
    gpraghuram
    Expert 100+
    P: 1,271
       
    gpraghuram
    I've been experimenting with arrays, and I have just found the simple way to find the length of an array. I attempted to make this a function with the specific array as the only argument. It didn't work. I thought it was bad coding; but, after a while, I got fed up and put the same code in both the main() and the function. Like so

    Expand|Select|Wrap|Line Numbers

        int getLength(int *myarray);
        int main(void)
        {
            int myarray[]={5,4,3,2,1};
            int size1=(sizeof(myarray) / sizeof(myarray[0]));
            int size2=int_getLength(myarray);
            printf("%d and %d should be the same",size1,size2);
            return 0;
        }
        int getLength(int *myarray)
        {
            return (sizeof(myarray) / sizeof(myarray[0]));
        }
        

    size1,main, prints to be 5, which is the correct length.


    size2, function, prints 1.


    I don't know why this is happening. I have also tried using (int myarray[])as the parameter, but the output is the same.


    My logical assumption would be that the function is only passing in the first element of the array or it could do something with obtaining the length. Can someone please explain why this is happening.

    When single dimension array is passed as a parameter to a function then it is passed as a pointer.

    Thats why u are getting the size like that

    Raghuram

    Feb 9 '08
    #2
    reply
    weaknessforcats
    Expert Mod 5K+
    P: 6,832
       
    weaknessforcats

    The real problem is a thing called decay of array.


    That is, when an array is passed to a function, all that is passed is the address of element 0. So the function gets and address and not the entire array. From the perspective of the function, the array has disappeared and all the function sees is a pointee to a single vaiable. The function must assume there is an array.


    Then, the sizeof only tells you the size of the variable on the local stack. In this case, the size of the address, which is most likely 4.


    So, don't use that sizeof trick to get the number of array elements. Instead define a const int that is set to the number of elements and pass that along withe the array name to the function.

    Feb 9 '08
    #3
    reply
    2n2is5
    P: 2
       
    2n2is5
    The real problem is a thing called decay of array.


    That is, when an array is passed to a function, all that is passed is the address of element 0. So the function gets and address and not the entire array. From the perspective of the function, the array has disappeared and all the function sees is a pointee to a single vaiable. The function must assume there is an array.


    Then, the sizeof only tells you the size of the variable on the local stack. In this case, the size of the address, which is most likely 4.


    So, don't use that sizeof trick to get the number of array elements. Instead define a const int that is set to the number of elements and pass that along withe the array name to the function.

    I had assumed that was the only way, Thanks.
  • 相关阅读:
    Cache Miss
    EmmyLua 注解标记总结
    关于浮点数计算时的精度问题 0.1+0.2不等于0.3
    Git-原理相关归纳-非入门
    读《非暴力沟通》
    Unity-图片压缩格式
    Git-大小写的坑
    将当前系统中的进程信息打印到文件中
    g++用法
    C++文本文件读写操作
  • 原文地址:https://www.cnblogs.com/lexus/p/2582154.html
Copyright © 2011-2022 走看看