Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208310
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 824
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-12 21:40
个人简介

只有今天的埋头,才有明天的出头。

文章分类

全部博文(80)

文章存档

2014年(80)

我的朋友

分类: C/C++

2014-10-11 23:07:14

指针运算:

数组的空间大小为sizeof(array_type)*array_size

指针与整数的运算规则:p + n——> (unsigned int)p + n*sizeof(*p);

p指向一个同类型的数组的元素时:p + 1指向当前元素的下一个元素,p  - 1指向当前元素的上一个元素。

指针只有减法(加、乘、除都不合法)相减仅2个指针指向同一数组中的元素时才有意义,表示所指元素的下标差。2个指针相减没指在同一个数

组,结果未定义(可能是分别指向栈空间、堆空间,也可能由cpu块读取的对齐规则决定)。

p1 – p2 ; ——> ((unsigned int)p1 – (unsigned int)p2)/sizeof(type);

指针比较:<  <=   >  >=  指针关系运算的前提是同时指向同一个数组的元素。利用指针比较判断循环是否结束。


数组访问2等价方式:

【下标】int a[5];a[1]=3;a[3]=5;ó【指针】int a[5]; *(a + 1)=3;*(a + 3)=5;

当指针以固定的增量在数组中移动其效率高于下标产生的代码,但指针增量为1具有硬件增量模型效果更明显。



a
&a的意义不同在于指针运算,a指向数组开始的地方,&a指向结束的地方。例如:

a +1 => (unsigned int)a + sizeof(*a)

&a + 1 =>(unsigned int)(&a) + sizeof (*&a)

 

数组作为函数参数时编译器将其编译成对应的指针:

void f(int a[]); ——>void f(int* a);

void f(int a[5]); ——>void f(int* a);


指针和数组的对比:

数组声明时编译器自动分配一片连续内存空间,指针声明时只分配用于容纳指针的4字节空间,在作为函数参数时,数组参数和指针参数等价,数

组名在多数情况下可以看做常量指针,其值不能改变,指针的本质是变量保存的值被看做内存中的地址。

 

 

阅读(938) | 评论(0) | 转发(0) |
0

上一篇:数组基础

下一篇:字符串

给主人留下些什么吧!~~