zoukankan      html  css  js  c++  java
  • 指针的加减操作

    #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位系统);

  • 相关阅读:
    Linux命令-查看进程
    Linux命令-查看内存
    Linux命令---vim
    oracle分页查询按日期排序失败问题
    oracle使用between and边界问题
    给大家介绍一个自我感觉好用的网站
    想学习一下微服务
    oracle获取年、月、日
    mybatis返回map结果集
    修改表中列
  • 原文地址:https://www.cnblogs.com/zzdbullet/p/9493369.html
Copyright © 2011-2022 走看看