Using pointer to char array, values in that array can be accessed?
我创建了ptr作为指向5个字符数组的指针。
1 | char (*ptr)[5]; |
为其分配了char数组的地址。
1 2 | char arr[5] = {'a','b','c','d','e'}; ptr = &arr; |
使用指针指针指针指针可以访问这个数组中的char值吗?
1 2 |
它不打印值。
在我的理解中,ptr将包含数组的基地址,但它实际上指向完整数组所需的内存(即5个字符)。因此,当ptr递增时,它会向前移动
当您想要访问一个元素时,您必须首先取消引用您的指针,然后索引您想要的元素(这也是取消引用)。也就是说,你需要:
value:%c", (*ptr)[0]);
注意,使用指向数组的指针在C中并不常见。相反,只需使用指向数组中第一个元素的指针,并将长度作为一个单独的元素处理,或者将senitel值放在数组的末尾,这样就可以了解数组的结束时间,例如。
1 2 3 4 5 | char arr[5] = {'a','b','c','d','e',0}; char *ptr = arr; //same as char *ptr = &arr[0] printf(" value:%c", ptr[0]); |
大多数响应者甚至不知道数组指针是什么…
问题在于,使用数组指针进行指针运算:ptr+1意味着"向前跳转5个字节,因为ptr指向5个字节的数组"。
改为这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #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(" value: %c", (*ptr)[i]); } } |
获取数组指针指向的内容,得到一个数组。所以它们就像C中的任何指针一样工作。
在字符数组之前使用指针
通常,字符数组用于存储其中的单个元素,即每个元素1个字节
如:
1 | char a[]={'a','b','c'}; |
我们不能在其中存储多个值。
通过在字符数组之前使用指针,我们可以将多维数组元素存储在数组中。
即
1 2 3 4 |
您应该创建如下的ptr:
1 | char *ptr; |
您已经创建了ptr作为指向字符的指针数组。上面创建了一个指向字符的指针。
编辑:完整代码应为:
1 2 3 4 5 |