我被困在如何使用指针显示数组。我可以使用for循环使用数组轻松完成此操作,但我有兴趣知道如何使用指针,我被困在如何计算数组的起点和终点。
以下是示例程序
void printArray(int *ptr);
{
//for statement to print values using array
for( ptr!=NULL; ptr++) // i know this doesn't work
printf("%d", *ptr);
}
int main()
{
int array[6] = {2,4,6,8,10};
printArray(array);
return 0;
}
答案 0 :(得分:3)
您有几种选择:
-1
)作为数组的最后一个元素;如果这样做,则必须确保此值不能作为数组的一部分出现。答案 1 :(得分:3)
检查NULL技巧仅适用于NULL终止字符串。对于数字数组,您也必须传递大小。
void printArray(int *ptr, size_t length);
{
//for statement to print values using array
size_t i = 0;
for( ; i < length; ++i )
printf("%d", ptr[i]);
}
void printString(const char *ptr);
{
//for statement to print values using array
for( ; *ptr!='\0'; ++ptr)
printf("%c", *ptr);
}
int main()
{
int array[6] = {2,4,6,8,10};
const char* str = "Hello World!";
printArray(array, 6);
printString(str);
return 0;
}
答案 2 :(得分:0)
当一个数组作为参数传递给一个函数时,它会被衰减成一个指向数组第一个元素的指针,从而丢失有关数组长度的信息。要在接收函数(printArray
)中处理数组,需要一种方法来了解数组的长度。这可以通过两种方式完成:
NULL
。在您的示例中,如果该值永远不会出现在实际数据中,则可能为-1
。printArray
。这将提供以下for
语句:
//Marker value.
for(;*ptr != -1; ++ptr)
printf("%d", *ptr);
//Length parameter
for(int i = 0; i < length; ++i)
printf("%d", *(ptr+i));
答案 3 :(得分:0)
该函数需要知道数组的大小。有两种常见的方法:
将实际尺寸传递给该功能,例如
void printArray(int *ptr, size_t size)
{
int *const end = ptr + size;
while( ptr < end ) {
printf("%d", *ptr++);
}
}
int main()
{
int array[6] = {2,4,6,8,10};
printArray(array, sizeof(array) / sizeof(array[0]) );
return 0;
}
明确地为数组提供sentinel 0(或其他适当的)元素:
void printArray(int *ptr);
{
//for statment to print values using array
for( *ptr != 0; ptr++) // i know this doesn't work
printf("%d", *ptr);
}
int main()
{
int array[6] = {2,4,6,8,10, NULL};
printArray(array);
return 0;
}
答案 4 :(得分:0)
以下是答案伙伴(未经测试)......
void printArray(int arr[]);
{
int *ptr;
for(ptr = &arr[0]; ptr <= &arr[5]; ptr++)
{
if(ptr != null)
printf("%d", *ptr);
ptr++; // incrementing pointer twice, as there are ‘int' values in array which
//are of size 2 bytes, so we need to increment it twice..
}
}
int main()
{
int array[6] = {2,4,6,8,10};
printArray(array);
return 0;
}