#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
char* p = arr;
printf("%d", *p+1);
}
arr是一个整型数组,一个元素占4个字节
char是字符型指针,加1不是只能访问一个字节吗,怎么输出结果是2 啊
*p+1的意思是数组的第0个元素值加1,所以是2。是先执行*p,获得第0个元素值
如果你要得到数组第1个元素值,那么要用*(p+1),指针先后移,然后再取值
*p = 1
*p + 1 = 2
这里是先取值再加一
不是*(p+1)
char* p = arr;会报错吧,无法从“int [10]”转换为“char *”
#include <stdio.h>
int main()
{
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
char *p = arr; // 强制转换int *指针为char *
// p指针的值等于arr首地址
// int占4个字节,arr在内存排列是
// | 0x00000A | ^
// | 0x000009 | |
// ... 栈地址增加方向
// | 0x000002 |
// | 0x000001 | <-- arr
// arr第一个元素是1,在小端机器上内存字节排列顺序是
// | 0x00 | ^
// | 0x00 | |
// | 0x00 | 栈地址增加方向
// | 0x01 | <-- p, arr
// 因此p指向的是0x01字节
printf("%d", *p + 1); // *p + 1就是把0x01字节加1,即2
}