当你不完全理解它时,我正在努力学习一个真正的PITA指针。
我正在尝试打印数组中的所有元素,但只打印第一个元素。
#include <stdio.h>
int count(const int* numbers, int size)
{
for(; numbers < size; numbers++)
{
printf("%d", *numbers);
}
}
int main(void)
{
int numbers[] = {3, 4, 6, 3, 46};
int result = count(numbers, 5);
printf("%d\n", result);
return 0;
}
计数功能中的循环似乎无法正常工作,因为它只循环一次,但我无法理解原因。
答案 0 :(得分:4)
比较numbers < size
错误。
您有3个选项:
有一个单独的索引变量:
int count;
for(count = 0; count < size; count++)
{
printf("%d", numbers[count]);
}
有一个单独的“光标”指针:
const int * const end = numbers + size;
for(; numbers < end; numbers++)
{
printf("%d", *numbers);
}
减少size
:
for(; size != 0; size--, numbers++)
{
printf("%d", *numbers);
}
答案 1 :(得分:2)
因为数字是指针,所以它包含一个地址。 size
是int
,等于5
。地址不是5,也不是5。
您可以保存起始地址并计算偏移量:
int count(const int* numbers, int size)
{
const int* start = numbers;
for(; (int)(numbers - start) < size; numbers++)
{
printf("%d\n", *numbers);
}
}
答案 2 :(得分:2)
count()
函数应为
int count(const int* numbers, int size)
{
for(; size > 0; numbers++, size--)
{
printf("%d", *numbers);
}
}