我创建了ptr作为指向5个字符数组的指针.
char (*ptr)[5];
Run Code Online (Sandbox Code Playgroud)
为它指定了一个char数组的地址.
char arr[5] = {'a','b','c','d','e'};
ptr = &arr;
Run Code Online (Sandbox Code Playgroud)
使用指针ptr可以访问此数组中的char值吗?
printf("\nvalue:%c", *(ptr+0));
Run Code Online (Sandbox Code Playgroud)
它不打印该值.
在我的理解中,ptr将包含数组的基址,但它实际上指向完整数组所需的内存(即5个字符).因此,当ptr递增时,它会向前移动sizeof(char)*5字节.那么使用这个指向数组的指针是不是可以访问数组的值?
nos*_*nos 20
当你想要访问一个元素时,你必须首先取消引用你的指针,然后索引你想要的元素(这也是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]);
Run Code Online (Sandbox Code Playgroud)
大多数人回答甚至不知道数组指针是什么...
问题是你用数组指针做指针算术: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]);
}
}
Run Code Online (Sandbox Code Playgroud)
获取数组指针指向的内容,然后得到一个数组.所以它们就像C中的任何指针一样工作.
| 归档时间: |
|
| 查看次数: |
102470 次 |
| 最近记录: |