0

我是 C 新手,但决心学习好的 C。我需要你的帮助。在练习数组时,我只是想发现我访问数组元素的方式是正确的,或者可能有更好的方法来做到这一点。请检查以下代码并建议一种使用带指针的数组的好方法。如果有人能指导我学习使用指针进行数组高级实践的教程,我将不胜感激。

int main()
{
   unsigned int i, j;
   unsigned int arr1[] = {1,2,3,4,5,6,7,8,9};

   unsigned int * ptr_arr = (unsigned int *)malloc(sizeof(unsigned int));
   ptr_arr = arr1;

   for(i=0;i<=8;i++)
   {
         printf("Value at location %d\t is:  %d\n",i,*(ptr_arr+i));
         printf("\n");         
         printf("Value of i %d and value at %d\n",i, ptr_arr[i]);
   }

   return 0;
}  
4

4 回答 4

4

您的程序正在泄漏内存

unsigned int * ptr_arr = (unsigned int *)malloc(sizeof(unsigned int));

无需为 ptr_arr 分配内存。

分配 arr1 的地址就足够了

ptr_arr = arr1;

另一种使用它的方法是每次递增指针并使用它

    ptr_array2 = arr1
    for (int i = 0; i < 8 ; i++)
    {
       printf ("%d", *ptr_array2);
       ptr_array2++;
     }
于 2013-02-27T04:43:56.110 回答
1

访问数组中元素的两种方式都是有效的。但为了便于阅读,请array[subscript]使用*(arrayStart+index).

例子:

int array[10] = {1,2,3,4,5,6,7,8,9,0};

在数组中,元素是连续放置的,从 开始array(say address 0x00000000)。假设一个 32 位整数大小,2放置在地址 处array + 4,即地址处0x00000004,类似地,下一个元素3位于地址处array + 8,即地址处0x00000008,依此类推。

当我写作时,array[2]我的意思是我想要(or ) 的元素之后的第二个元素,它实际上是数组中的第三个元素。因此,数组索引从 开始。arrayarray[0]0

它的字面意思是array[0]= *(array + 0), array[1]= *(array + 1), array[2]=*(array+2)

于 2013-02-27T05:01:10.430 回答
0

您无需为 ptr_arr 分配内存,因为无论如何您都将 arr 的地址分配给 ptr_arr。您上面的代码将导致内存泄漏。

您可以参考 Internet 上提供的众多教程之一。仅供参考,我发布了一些链接:

http://www.clear.rice.edu/comp221/html/pdf/03-arrays-pointers.pdf http://www.cs.utexas.edu/users/fussell/courses/cs310h/lectures/Lecture_17-310h .pdf

于 2013-02-27T04:45:41.203 回答
0

你错过了一种方法:

     printf("Value of i %d and value at %d\n",i, i[ptr_arr]);
于 2013-02-27T04:47:55.227 回答