关于指针和加减法:

指针的加减法:指针的加减法,加多少或者减多少,主要是看所指对象的sizeof值

例子:

    double m = 3.0;
int n = ;
double *p=&m;
int* p1=&n; printf("p:%d\n", p );
printf("P+1:%d\n", p+);
printf("P1:%d\n", p1);
printf("P1+1:%d\n", p1+);

如上图所示,p加了8,因为指向是double类型。p1加了4,因为指向了int。

现在我定义一个数组,int a[3]={0};看一下a+1和&a+1到底加了多少:

    int p[] = {  };

    printf("p:%d\n", p);
printf("P+1:%d\n", p + ); printf("&p:%d\n", &p);
printf("&p+1:%d\n", &p+);

p+1加了4,&p+1加了12。

此时p指向的是数组的第一个元素,而&p指向的一个大小为3的int数组。因此p+1加的是一个int的大小,而&p+1加的是一个int[3]数组的大小12。

关于类型和sizeof:

虽然如此,但是p的类型是数组,&p的类型是指针。而sizeof的值主要是根据变量类型判断的。

int (*p1)[]=&p;

p1和&p的类型都是指向int [3]的指针,而p的类型就是一个int[3]的数组。PS:数组在作为参数的时候退化为一个指针。

而sizeof主要是根据变量的类型,因此指针大小自然为4,p的大小是12。

最新文章

  1. 通过Redux源码学习基础概念一:简单例子入门
  2. angularjs SyntaxError: Unexpected token  in JSON at position 0
  3. COALESCE NVL NVL2 DECODE
  4. Mybatis 学习-2
  5. asp.net如何设置数据库连接池的数量
  6. Android中的EditText默认时不弹出软键盘的方法
  7. ASP.NET开发规范:OWIN
  8. 653. Two Sum IV - Input is a BST
  9. Linux的vi详解
  10. neutron二
  11. [Swift]LeetCode83. 删除排序链表中的重复元素 | Remove Duplicates from Sorted List
  12. oracle 的tnsnames.ora,listener.ora
  13. Web中的积累:外观模式 Facade
  14. log4j Tricks (log4j 1.2)
  15. Arduino 开关控制小灯持续亮之具体思路
  16. kohana task 编写计划任务
  17. spring boot 集成 quartz 定时任务
  18. FIFO 的控制逻辑---verilog代码
  19. Oracle EBS AP 供应商API
  20. linux学习笔记《一.烧写篇_android》

热门文章

  1. HTTP通过请求和响应的交换达成通信
  2. 图论基础之Dijkstra算法的初探
  3. ReOut
  4. 流行框架(angularj基础)
  5. Maven搭建Hadoop开发环境
  6. VMwareTools安装失败提示找不到C headers和gcc目录
  7. Hibernate框架 主配置文件(Hibernate.cfg.xml) 映射配置 说明
  8. 为Dynamics 365启用部署级的跟踪以及跟踪文件的定期删除
  9. Express 学习笔记纯干货(Routing、Middleware、托管静态文件、view engine 等等)
  10. centos7架设vsftpd服务