可能重复:
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”中它可以工作,但它也提供了垃圾值。它能使它正常工作吗? 请帮忙......
答案 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中,数组只是某个地方的某个地址。