数组与指针
来源:互联网 发布:的士计价器软件 编辑:程序博客网 时间:2024/05/21 14:35
数组是相同变量的有序集合,大小为一片连续的内存空间存储元素。数组名可看作一个常量指针,它指向内存中数组首元素的起始地址。虽然数组的地址&a与数组名的值相同,可是表示不同的概念,数组的大小sizeof(*a)*array_size ==sizeof(*a)*(sizeof(a)/sizeof(*a))
因此*(a+i)相当于a[i],
指针是一种特殊类型的变量,存放指向数据变量的地址。其实本质上还是变量,既然是变量就占一定的内存空间,而它的内存空间,好像与地址总线有关。目前的指针大小都占四个字节,以后CPU的发展与操作系统的升级,可能会占更大的内存空间。
指针运算
p + n; == (unsigned int)p + n*sizeof(*p);
当指针p指向一个同类型的数组的元素时: p+1将指向当前元素的下一个元素; p-1将指向当前元素的上一个元素。
当指针p指向一个同类型的数组的元素时: p+1将指向当前元素的下一个元素; p-1将指向当前元素的上一个元素。
指针之间只支持减法运算,且必须参与运算的指针类型必须相同
p1 – p2; ( (unsigned int)p1 - (unsigned int)p2) / sizeof(type);
注意:
只有当两个指针指向同一个数组中的元素时,指针相减才有意义,其意义为指针所指元素的下标差
当两个指针指向的元素不在同一个数组中时,结果未定义,可能没有实际意义,主要是两个数组分配的内存空间方式可能不同
p1 – p2; ( (unsigned int)p1 - (unsigned int)p2) / sizeof(type);
注意:
只有当两个指针指向同一个数组中的元素时,指针相减才有意义,其意义为指针所指元素的下标差
当两个指针指向的元素不在同一个数组中时,结果未定义,可能没有实际意义,主要是两个数组分配的内存空间方式可能不同
#include <stdio.h>#include <malloc.h>int main(){ char s1[] = {'H', 'e', 'l', 'l', 'o'}; int i = 0; char s2[] = {'W', 'o', 'r', 'l', 'd'}; char* p0 = s1; char* p1 = &s1[3]; char* p2 = s2; int* p = &i; printf("%d\n", p0 - p1); //printf("%d\n", p0 + p2); printf("%d\n", p0 - p2); //printf("%d\n", p0 - p); //printf("%d\n", p0 * p2); //printf("%d\n", p0 / p2); return 0;}结果:
- 指针:指针与数组
- 指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组 与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- hdu2089 不要62
- PHP学习笔记二(基础语法)
- 动态规划入门——Dividing
- 虚拟机类加载机制
- 求从1到1000000之间的奇数之和
- 数组与指针
- 用匈牙利算法求二分图的最大匹配
- 我的第一次编程
- Windows 7蓝屏重启解决方法,激活工具没用!附下载!
- 解决Rails的bundle install/update too slow问题
- 二分匹配,最大流,匈牙利图形解释及证明
- 都是
- 八大排序c++可运行精简版,一目了然
- 2014迅雷校园招聘笔试题答案