试图找到访问数组元素的不同方法?

时间:2013-02-27 04:38:58

标签: c

我是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 个答案:

答案 0 :(得分: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++;
     }

答案 1 :(得分: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]时,我的意思是我希望第二个元素在<{strong>之后的元素array(或array[0]),这实际上是第三个元素阵列。因此,数组索引从0开始。

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

你错过了一种方法:

     printf("Value of i %d and value at %d\n",i, i[ptr_arr]);