Iphone 目标c中的数组长度

Iphone 目标c中的数组长度,iphone,objective-c,Iphone,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, 3

可能重复:

我怀疑如何找到数组的长度

我的代码是

#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(int i,int*anBray);
int main(int argc,const char*argv[]
{
国际银行【】{0,5,89,34,9189,9,18,9918991899,18,99189,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,89,34,2600,-2,0};
int i;
NSLog(@“输入:”);
for(i=0;ifor(i=0;i
要确定数组的大小,可以像在主函数中一样,在特定情况下使用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;
}
#包括
空f(整数内勒姆,整数*a){
INTE;
对于(e=0;e
在任何类型的C语言中,您都无法确定无维度声明的数组(比如说NSArray)的大小。信息根本不存在。数组纯粹作为指向第一个元素的指针传递,数组中没有存储维度信息,也没有以某种方式随指针传递维度信息


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

这个问题几乎与Objective C无关,更像是一个C问题。Objective C唯一的问题是使用NSLog而不是printf()目标C数组通常是用NSoundation从基础类中完成的。@克里斯:谢谢。我已经理解了拓扑结构。我怎样才能纠正我的代码?@ USE1511571N——传递维度,使用NSARTAL等等。没有NSAARYAY存在“维度”,有任何方式传递参数或维度吗?与数组一起存储的信息。您可以使用sizeof array/sizeof array[0]确定数组中的元素数。这就是为什么在我的回答中,我演示如何将其传递给函数。@ChrisYoung--您完全错了。您确定的是
数组
的声明大小,即变量。没有“随存储”的大小信息数组。我不太明白RU想说什么?请澄清againI给出了一个你将大小传递给函数的例子。你不明白什么?实际上我是这个网站的新用户。我的帐户已被阻止。请我请求作者重新打开我被阻止的帐户。我不会再出错。请。。。。