使用指针显示数组的内容

时间:2011-07-25 10:09:08

标签: c pointers

我被困在如何使用指针显示数组。我可以使用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;     
}

5 个答案:

答案 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)

该函数需要知道数组的大小。有两种常见的方法:

  1. 将实际尺寸传递给该功能,例如

    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;     
    }
    
  2. 明确地为数组提供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;     
}