#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int *f = &a;//指针变量f指向的a变量的内容
printf("变量a:%d,变量地址:%p\n", a, &a);
printf("变量b:%d,变量地址:%p\n", b, &b);//栈的生成方式 从高到低
printf("指针变量f的地址:%p\n",&f);
printf("指针变量f指向的a变量的内容:%d\n",*f);
printf("指针变量f指向的b变量的内容:%d\n",*(f-1)); //f -1 指针偏移一倍 int 是 4字节 f-1是b的地址
int c[4] = {1,2,3,4};
int *d = c;
for(int i=0;i<=2;i++)
{
int n=d[i];
printf("n = %d\n",n);
}
printf("数组所在地址:%p -- 数组第二元素地址:%p -- 数组第三元素地址:%p\n",d,d+1,d+2);//数组的数据从前到后顺序存储,而不是从后到前
//获取的是数组的指针,d+1是&c[1]地址空间的指针,指针的+1就会走到下个指针,我们可以通过指针的偏移来获取数据,下一个指针就是下一个数据的地址空间
//数据是int型,每个数据占用4个字节,所以数据的地址都相隔四个字节
int g = 1;
int h = 2;
int *x = &g;
int *y = &h;
printf("指针变量x的地址:%p\n",&x);
printf("指针变量y的地址:%p\n",&y);
printf("指针变量f指向的g变量的内容:%d\n",*x);
printf("指针变量f指向的h变量的内容:%d\n",*y);
//指针本身是紧挨着的,也就是说&p1的下一个指针就是&p2
//一个指针占4个字节,所以指针按地址空间来说&x和&y二者之间相差4个字节
//指针是在栈中,对象是在堆中
}
指针的偏移
于 2022-11-17 18:51:25 首次发布