kr8*_*r85 2 c c++ arrays pointers
有没有办法使用指针跨越整数数组中的所有元素(类似于使用指针跨越字符串元素).我知道整数数组不是NULL终止所以当我尝试使用指针溢出数组时溢出.所以我添加NULL作为数组的最后一个元素,它工作得很好.
int array[7]={1,12,41,45,58,68,NULL};
int *i;
for(i=array;*i;i++)
printf("%d ",*i);
Run Code Online (Sandbox Code Playgroud)
但是,如果数组中的一个元素为0,那将表现为NULL.是否有任何其他方法可以实现指针跨越整数数组中的所有元素?
通常,除非您选择不属于有效数据范围的标记值,否则不会.例如,有效范围可能是正数,因此您可以使用负数-1作为指示数组末尾的标记值.这是C风格的字符串如何工作; 使用NULL终结符是因为它超出了可以表示字符的有效整数范围.
但是,通常最好以某种方式将数组指针与指示数组大小的另一个变量配对,或者将另一个指针指向数组的一端.
在您的具体情况下,您可以执行以下操作:
// Note that you don't have to specify the length of the array.
int array[] = {1,12,41,45,58,68};
// Let the compiler count the number of elements for us.
int arraySize = sizeof(array)/sizeof(int);
// or int arraySize = sizeof(array)/sizeof(array[0]);
int main()
{
int* i;
for(i = array; i != array + arraySize; i++)
printf("%d ",*i);
}
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
int arrayBegin[] = {1,12,41,45,58,68};
int* arrayEnd = arrayBegin + sizeof(arrayBegin)/sizeof(arrayBegin[0]);
int main()
{
int* i;
for(i = arrayBegin; i != arrayEnd; i++)
printf("%d ",*i);
}
Run Code Online (Sandbox Code Playgroud)
但是只给出一个指针,你不知道它指向的数组有多长.实际上,你甚至无法判断指针是指向数组还是单个对象!(至少不便携.)
如果你有必须接受数组的函数,要么你的函数需要: