0

Possible Duplicate:
array in objective c

i have doubt about how to find the length of array.....

my code is

#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]); 

    }

}

in the function "void myFunction" it works but it gives garbage value too.how can it makes properly works? plz help...

4

2 回答 2

1

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

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

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

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

由于您无法从 myFunction 确定数组大小,因此您必须传递大小(实际上是元素计数,而不是字节大小)或在数组末尾使用已知的标记值(例如 -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;
}
于 2012-07-09T10:43:47.793 回答
0

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

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

于 2012-07-09T11:19:28.920 回答