第一阶段11 C语言指针分析

本文详细探讨了C语言中的指针,包括指针代码分析,如&a和&a+1的区别,首地址的指向意义,以及指针自增运算的顺序,通过实例展示了指针操作的运行结果。
摘要由CSDN通过智能技术生成

加入CSDN是出于记录,希望有不足之处多加指正。

1、指针代码分析 &a

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int (*p)[5] = NULL;      
    int arr[5] = {1,2,3,4,6};
    p = &arr;  //p 指向的是整个数组的首地址

    printf("arr  = %p\n", arr);
    printf("&arr  = %p\n", &arr);
    printf("p  = %p\n", p);
    printf("*p  = %p\n", *p);
    printf("p+1  = %p\n", p+1);
    printf("p+1  = %p\n", p+1);
    printf("(*p)+1  = %p\n", (*p)+1);

}

运行结果:

gec@ubuntu:~/cyy$ ./zhizheng 
arr  = 0x7ffd568442d0     //数组首元素的首地址
&arr  = 0x7ffd568442d0    //整个数组的首地址
p  = 0x7ffd568442d0       //整个数组的首地址
*p  = 0x7ffd568442d0      //通过指针来访问了该数组首元素
p+1  = 0x7ffd568442e4     //p 的类型为int [5] 所以加 1相当于加5个整型20字节
p+1  = 0x7ffd568442e4     //p 的类型为int [5] 所以加 1相当于加5个整型20字节
(*p)+1  = 0x7ffd568442d4  //*p 相当于arr + 1,arr是数组首元素的首地址,+1就加一个整型大小4字节

2、指针代码分析 &a+1 和 a+1

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int a[5] = {1,2,3,4,5};
    int b[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
   
    printf("&a  = %p\n",&a);
    printf("&a+1 = %p\n",&a+1);  //&a 表示整个数组 +1,加一个数组大小
    printf("a  = %p\n",a);
    printf("a+1 = %p\n",a+1);  //a 表示数组首元素的首地址 +1,表示增加一个单位

    return 0;
}

运行结果:

gec@ubuntu:~/cyy$ ./zhi2
&a  = 0x7ffc7b441010
&a+1 = 0x7ffc7b441024
a  = 0x7ffc7b441010
a+1 = 0x7ffc7b441014

3、首地址的指向重要性

#include <stdio.h>

int main(int argc , char const *argv[])
{
    int arr[] = {1,2,3,4,5};
    int *p = &arr[2];
    printf("%d ,%d ,%d ,%d ,%d\n",*(p - 2),*(p - 1),*p,*(p + 1),*(p + 2));
    return 0;
}

运行结果:

gec@ubuntu:~/cyy$ ./zhi3
1 ,2 ,3 ,4 ,5

4、指针 ++ 运算顺序

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int a[3] = {1,2,3};
    int *p;
    p = a;
    printf("%d", *(++p));    
    return 0;
}

运行结果:2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值