C++数组和指针加减法和sizeof问题
2024-10-11 14:16:52
关于指针和加减法:
指针的加减法:指针的加减法,加多少或者减多少,主要是看所指对象的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。
最新文章
- 通过Redux源码学习基础概念一:简单例子入门
- angularjs SyntaxError: Unexpected token in JSON at position 0
- COALESCE NVL NVL2 DECODE
- Mybatis 学习-2
- asp.net如何设置数据库连接池的数量
- Android中的EditText默认时不弹出软键盘的方法
- ASP.NET开发规范:OWIN
- 653. Two Sum IV - Input is a BST
- Linux的vi详解
- neutron二
- [Swift]LeetCode83. 删除排序链表中的重复元素 | Remove Duplicates from Sorted List
- oracle 的tnsnames.ora,listener.ora
- Web中的积累:外观模式 Facade
- log4j Tricks (log4j 1.2)
- Arduino 开关控制小灯持续亮之具体思路
- kohana task 编写计划任务
- spring boot 集成 quartz 定时任务
- FIFO 的控制逻辑---verilog代码
- Oracle EBS AP 供应商API
- linux学习笔记《一.烧写篇_android》