• 指针的加减操作


    #include <stdio.h>
    int main()
    {
    	//测试指向结构体的指针自减后地址的变化
    	typedef struct Student 
    	{
    		int id;
    		char name[10];
    		int score;
    	}stu;
    	stu a = { 1, "xiaoming", 33 };
    	printf("结构体的大小为%d
    ", sizeof(a));
    
    	stu *p = &a;
    	printf("指针p的地址为%d
    ", p);
    	printf("指针p的大小为%d
    ", sizeof(p));
    	printf("指针p指向结构体的大小为%d
    ", sizeof(*p));
    
    	p--;
    	printf("指针p的地址为%d
    ", p);
    	printf("指针p的大小为%d
    ", sizeof(p));
    
    	//测试指向char型的指针自减后地址的变化
    	char b = 11;
    	char *p1 = &b;
    	printf("指针p1的地址为%d
    ", p1);
    	printf("指针p1的大小为%d
    ", sizeof(p1));
    
    	p1--;
    	printf("指针p1的地址为%d
    ", p1);
    	printf("指针p1的大小为%d
    ", sizeof(p1));
    
    	//测试二级指针自减后地址的变化
    	char **p2 = &p1;
    	printf("指针p2的地址为%d
    ", p2);
    	printf("指针p2的大小为%d
    ", sizeof(p2));
    
    	p2--;
    	printf("指针p2的地址为%d
    ", p2);
    	printf("指针p2的大小为%d
    ", sizeof(p2));
    
    	return 0;
    }
    

      

    结构体的大小是20,在对指向结构体a的指针p做自减后,他的地址变化量为20;

    对指向char型数据的指针做自减后,地址变化量为1;

    对二级指针做自减后,地址变化量为4,因为二级指针p2指向的是p1,变化量为p1的大小(32位系统);

  • 相关阅读:
    elasticsearch如何设计索引
    LinkedList 的实现原理
    聊聊elasticsearch7.8的模板和动态映射
    elasticsearch7.8权限控制和规划
    cloudera manager server迁移
    2020年终总结
    工作两年半的一次复盘
    聊聊数据结构和算法
    AutoMapper源码解析
    [源码解析] 并行分布式框架 Celery 之 worker 启动 (2)
  • 原文地址:https://www.cnblogs.com/zzdbullet/p/9493369.html
Copyright © 2020-2023  润新知