我创建了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
个字节。那么使用这个指向数组的指针是不可能访问数组的值吗?
答案 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));