指针与数组(一)——指针认知
来源:互联网 发布:php网站源码与asp.net 编辑:程序博客网 时间:2024/05/22 09:00
一.定义与初始化
1. 如何理解指针?
1) 指针是变量。
2) 指针是一个地址,指向的是个类型。
3) 指针指向的是地址,地址指向的是内容。
4) 指针的指针,是面对于指针的变量。
5) 指针类型的字节长度由操作系统决定(32位操作系统为4字节,64位操作系统为8字节)
2. 定义指针的几种规范
int *p; //重在表示 *a 是 int型的。
int* p; //重在表示 int* 是一个类型(复核类型),它是指向 int 的指针。
二.*与&运算符详解
*是取指针目标运算符 其后跟随的必须是指针类变量
&是取地址运算,对任意变量都可以进行取地址操作
1. 指针的类型和指针所指向的类型
指针类型:
1) int *ptr; //指针的类型是int*
2) char *ptr; //指针的类型是char*
3) int **ptr; //指针的类型是int**
4) int (*ptr)[3]; //指针的类型是int(*)[3]
5) int *(*ptr)[4]; //指针的类型是int*(*)[4]
指针所指向的类型:
1) int *ptr; //指针所指向的类型是int
2) char *ptr; //指针所指向的类型是char
3) int **ptr; //指针所指向的类型是int*
4) int (*ptr)[3]; //指针所指向的类型是int()[3]
5) int *(*ptr)[4]; //指针所指向的类型是int*()[4]
2. 指针的值
p = &num = *pp = **ppp
*p = num = **pp = ***ppp = *(&num)
(*p)++:对p指向的内存空间进行操作(加1)à5 + 1 = 6
p++:对p对应的内存空间加1(步长)à0x1000 + 4(步长) = 0x1004
num++:对num对应的内存空间加1à5 + 1 = 6
一维指针保存基本变量的地址
二维指针保存一维指针的地址
三维指针保存二维指针的地址
远指针:超过二维的指针。
三.指针的运算
1. 指针的赋值运算
空指针:不允许操作,不允许访问。NULL为(void *)0的宏定义
野指针:(详情见野指针及野指针的避免)
指针的算术运算:
不同指针类型赋值导致的问题:因为指针的类型不同,代表指针的运算方式也不一样,所以运算后所指向的地址不一样。
à警告:从不兼容的指针类型赋值(检查步长)
长步长赋值给短步长:数据不完整
短步长赋值给长步长:数据可能越界
void *——万能指针:可指向任意类型的指针,但不能取值。
2. 指针的算术运算
指针+整数:加步长
指针-指针:两指针相隔的数据个数。
char *ptr = “hello world”;
char *str = ptr + sizeof(ptr);àstr – ptr = 11
int a[10] = {1,2,3,4,5,6,7,8,9,10};à&a[9]- &a[0] = 9
- 指针与数组(一)——指针认知
- 指针与数组(三)——数组认知
- 指针与数组(二)——字符串认知
- 数组与指针(一)
- 数组与指针(一)
- 指针(一)——指针与二级指针
- C语言——数组与指针进阶(一)
- 每日一题(10)—— 数组与指针
- 指针与数组(一)
- 指针与数组 (一)
- 易混淆概念(一)指针数组与数组指针
- C语言深度剖析之—指针与内存地址(函数指针,普通指针,指针数组,数组的指针,指针的指针)
- C语言深度剖析之—指针与内存地址(函数指针,普通指针,指针数组,数组的指针,指针的指针)
- C语言深度剖析之—指针与内存地址(函数指针,普通指针,指针数组,数组的指针,指针的指针)
- 指针学习笔记(4)——指针与数组
- C指针编程之道(一)- 指针与数组
- C程序设计语言--指针与数组(一)
- 指针数组和数组指针(一)
- unity实现发短信
- pg源码阅读二
- 1、ajax中的同步异步的理解
- Git学习 <day1>
- 问题:Xcode 7 添加*.dylib库的方法
- 指针与数组(一)——指针认知
- 0141 rtmplib rtmp协议过程分析
- 八成Java开发者解答不了的问题
- C# winform 中MessageBox用法大全(附效果图)
- 浅谈Activity
- UVA 11461 K - Square Numbers
- poj 2104K-th Number(划分树)
- 关于Spring的69个面试问答——终极列表
- POJ-3717-Facer's Chocolate Dream