指针变量与地址

注意看代码块里面的注释
本人小白,希望大佬指正
#include<stdio.h>
int main() {
   int a[3] = {1, 2, 3};
    int *p;
    p = &a[0];
    printf("%d\n", *p);//输出通过p存在的地址访问到内存中所存在的数值
    printf("%p\n", p);//输出p存的地址,也就是a[0]的地址
    printf("%p\n", &p);//输出p指针所在的地址,即p本身的地址
    //注意地址的输出是%p
    /*顺便说一下 %g是对于浮点数的输出,作用是去掉多余的0,不如对于数值-2.4,如果求绝对值    fabs(-2.4), 得到的结果会是2.400000,那么我们怎么确保是输出为2.4呢,将输出的占位符%d替换为%g就可以了*/
   return 0; 
}
//注意
对于上面例子
   p里面存的是a[0]的地址
   那么其实,p + 1 其实就是对地址进行 +1, 也就是 p + 1 = &a[1];
   *p就是通过p存在的地址访问到内存中所存在的数值 即*p = a[0];
   &p就是指针p自己本身的内存地址
   //
   printf("%d\n",*(p + 1));//输出a[1]的值
   printf("%d\n",*(a[0] + 1))//输出a[1]的值
   
  • p + 1 和 &a[0] + 1这种运算得到的都是a[1]的地址,再取*就会得到a[1]的值
  • 类似的p + 2、 &a[0] + 2、 &a[1] + 1都会得到a[2]元素的地址了,就是&a[2];
#include <stdio.h>

int main() {
    int a = 4;
    int *p;//声明一个指针
    p = &a;
    int **q;//声明一个指向指针变量的指针变量
    q = &p;//q指向的是p的地址
    printf("p in %p, q = %p\n", &p, q);//输出都是p的地址
    printf("a in %p, p = %p, *q = %p\n", &a, p, *q);//输出a的地址,*q指向的是p本身的地址,*q = *(&p),就是取p中存储的值,也就是p中存着的a的地址
    printf("a = %d, *p = %d, **q = %d\n", a, *p, **q);//输出a的值
    
    return 0;
}

写于2021.6.4
有帮助的话,点个赞吧,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值