L23数组指针分析
来源:互联网 发布:mac怎么装office软件 编辑:程序博客网 时间:2024/06/16 10:04
L23数组指针分析
指针是一种特殊的变量,与整数的运算规则为:
p+n <-->(unsigned int)p +n*sizeof(*p)
指针的比较规则:
1. 大小比较需要指针指向同一个数组
2. ==和 != 不需要
#include
a 和&a的区别
- a为数组是数组元素的地址
- &a为整个数组的地址
- a和&a的意义不同,其区别于指针运算
- a+1 –> (unsigned int)a+sizeof(*a)
- a+1指向下一个元素
- &a+1–>(unsigned int)(&a)+sizeof(*&a)
- &a+1指向数组的结尾(最后一个元素的后面)
面试题
#include <stdio.h>int main(){ int a[5] = {1, 2, 3, 4, 5}; int* p1 = (int*)(&a + 1); int* p2 = (int*)((int)a + 1); int* p3 = (int*)(a + 1); printf("%d, %d, %d\n", p1[-1], p2[0], p3[1]); return 0;}
输出:
5 ,33554432,3 也即:a[4],0x2000000,a[1+1]|a[0] |a[1] |a[2] |a[3] |a[4] ||01000000|02000000|03000000|04000000|05000000|| |xxxxxxxx|-->P2指向的空间 内部的值为00000002 ->0x02000000 = 33554432
数组作为函数参数
编译器将数组变为对应的指针
void f(int a[]); <--> void f(int* a);void f(int a[5]); <--> void f(int* a);
结论:
一般情况下,当定义的函数中有数组参数时,需要定义另一个参数来标示数组的大小,因为当做指针传输时,会丢失数组大小。
指针和数组的对比
- 数组声明时编译器自动分配一片连续的内存空间
- 指针声明时只分配用于容纳指针的4字节空间
- 在作为函数参数时,数组参数和指针参数等价
- 数组名在多数情况可以看做常量指针,其值不能改变
- 指针的本质是变量,保存的值被看做内存中的地址
0 0
- L23数组指针分析
- 数组与指针分析
- 指针数组例题分析
- 数组指针的分析
- 数组与指针分析
- 指针和数组分析
- 指针数组和数组指针分析
- 指针数组 与 数组指针 的分析
- 指针数组和数组指针分析
- 32--数组指针和指针数组分析
- 数组指针和指针数组分析
- 指针与数组存储分析
- 函数值指针数组分析
- 指针分析:数组指针,指针数组,指针的指针,野指针深度解析
- 简单分析 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针
- C++语言中数组指针和指针数组彻底分析
- C++数组指针和指针数组的分析
- 一维数组指针二维数组指针分析
- L22数组基础
- 排版系统Latex傻瓜方式使用(论文排版)
- Android Matrix图形变换
- hdu1294 Rooted Trees Problem(重复组合+整数拆分+DFS)
- 文件共享
- L23数组指针分析
- 关于android事件分发的总结
- Android网络编程之http发送/请求服务
- 分手后极品留言
- Rightmost Digit
- Add Two Numbers
- 再说MySQL中的 table_id
- speex编解码在android上实现
- 5.2-3