使用指向char数组的指针,可以访问该数组中的值?

时间:2011-09-02 07:29:04

标签: c pointers

我创建了ptr作为指向5个字符数组的指针。

char (*ptr)[5];

为它指定了char数组的地址。

char arr[5] = {'a','b','c','d','e'};
ptr = &arr;

使用指针ptr可以访问此数组中的char值吗?

printf("\nvalue:%c", *(ptr+0));

它不会打印该值。

在我的理解中,ptr将包含数组的基址,但它实际上指向完整数组所需的内存(即5个字符)。因此,当ptr递增时,它向前移动sizeof(char)*5个字节。那么使用这个指向数组的指针是不可能访问数组的值吗?

4 个答案:

答案 0 :(得分:18)

当你想要访问一个元素时,你必须首先取消引用你的指针,然后索引你想要的元素(这也是dereferncing)。即你需要这样做:

printf("\nvalue:%c", (*ptr)[0]);,与*((*ptr)+0)

相同

请注意,使用指向数组的指针在C中并不常见,只需使用指向数组中第一个元素的指针,并将长度作为单独的元素处理,或将senitel值放在数组的结尾,因此可以了解数组何时结束,例如

char arr[5] = {'a','b','c','d','e',0}; 
char *ptr = arr; //same as char *ptr = &arr[0]

printf("\nvalue:%c", ptr[0]);

答案 1 :(得分:6)

大多数人回答甚至不知道数组指针是什么......

问题是你用一个数组指针做指针算术:ptr + 1意味着“因为ptr指向一个5字节的数组,所以提前跳5个字节”。

请改为:

#include <stdio.h>

int main()
{
  char (*ptr)[5];
  char arr[5] = {'a','b','c','d','e'};
  int i;

  ptr = &arr;
  for(i=0; i<5; i++)
  {
    printf("\nvalue: %c", (*ptr)[i]);
  }
}

获取数组指针所指向的内容,然后得到一个数组。因此它们就像C中的任何指针一样工作。

答案 2 :(得分:1)

在字符数组之前使用指针

通常,字符数组用于在其中存储单个元素,即每个1个字节

例如:

char a[]={'a','b','c'};

我们不能在其中存储多个值。

通过在字符数组之前使用指针,我们可以将多维数组元素存储在数组中

char *a[]={"one","two","three"};
printf("%s\n%s\n%s",a[0],a[1],a[2]);

答案 3 :(得分:0)

你应该按如下方式创建ptr:

char *ptr;

您已将ptr创建为指向字符的指针数组。上面创建了一个指向char的单个指针。

编辑:完整代码应为:

char *ptr;
char arr[5] = {'a','b','c','d','e'};
ptr = arr;
printf("\nvalue:%c", *(ptr+0));