目标c中的数组长度

时间:2012-07-09 10:36:36

标签: iphone objective-c

  

可能重复:
  array in objective c

我对如何找到数组的长度有疑问.....

我的代码是

#import <Foundation/Foundation.h>

void myFunction(int i, int*anBray);


int main(int argc, const char * argv[])
{
    int anBray[] = {0,5, 89, 34,9,189,9,18,99,1899,1899,18,99,189, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,2,600,-2,0};
    int i;    

    NSLog (@"Input:");
    for (i=0; i<sizeof(anBray)/sizeof(int); i++)
        NSLog(@ " anBray[%i]= %i ",i,anBray[i]); 

    NSLog (@"Output");

    myFunction(i,anBray);

    return 0;

}

void myFunction(int i, int*anBray) {

    for ( i=0;  i<anBray; i++) {
        if ( anBray[i] == 0) {
            anBray[i] = anBray[i+1] - anBray[i]; 
        } else {
            anBray[i] = anBray[i] - anBray[i];
            anBray[i] = anBray[i+1] - anBray[i];
        }
        NSLog(@ " anBray[%i]= %i",i,anBray[i]); 

    }

}

在函数“void myFunction”中它可以工作,但它也提供了垃圾值。它能使它正常工作吗? 请帮忙......

2 个答案:

答案 0 :(得分:1)

for(i = 0; i&lt; anBray; i ++){line没有意义。您正在尝试将指针与整数进行比较。

要确定数组的大小,您可以像在主函数中那样使用sizeof anBray / sizeof anBray [0]或sizeof anBray / sizeof(int)来确定特定情况。

但是,在myFunction函数中,您接受一个int指针,因此无法获得指针指向的数组大小。这个int指针指向anBray的第一个元素。也就是说,以下内容是等效的:

myFunction(i, anBray);
myFunction(i, &anBray[0]);

由于您无法从myFunction确定数组大小,您必须传递大小(实际上是元素数,而不是以字节为单位的大小)或在数组末尾使用已知的sentinel值(例如-1)检测它。然后,您可以循环直到结束,例如:

#include <stdio.h>

void f(int nelem, int *a) {
    int e;
    for (e = 0; e < nelem; e++) // Now the element count is known.
        printf("a[%d] = %d\n", e, a[e]);
}

int main(void) {
    int x[] = { 5, 6, 7, 8 };
    // The number of elements in an array is its total size (sizeof array)
    // divided by the size of one element (sizeof array[0])
    // Here we pass it as the first argument to f()
    f(sizeof x / sizeof x[0], x);
    return 0;
}

答案 1 :(得分:0)

在任何C语言中,你都不能确定没有维度声明的数组(相对于NSArray)的大小。这些信息根本无法获得。数组纯粹作为指向第一个元素的指针传递,并且没有与数组一起存储的维度信息或以某种方式与指针一起传递。

在像Java这样的语言中,数组本身就是一个对象,其头部包含其维度。但是在C中,数组只是某个地方的某个地址。