03-数据结构_预备知识-指针
2013-07-22 12:07
369 查看
1) 指针的重要性
指针是C语言的灵魂
2) 定义
A)地址:
内存单元的编号
从0开始的非负整数
范围: 0 ~ FFFFFFFFH(4G-1)
B)指针:
指针就是地址, 地址就是指针.(指针,地址,内存单元编号, 两两等价)
指针变量: 存放 地址(内存单元编号) 的变量
3) 分类
A) 基本类型指针 -> int * p;
int i = 5;
int * p; // 指针变量; p, 变量名; 类型, int *, 存放int型变量 的地址;
p = &i; // 将 int型变量 i 的地址赋值给 指针变量.
printf("%d\n", *p); // *p, 以 p的内容 作为地址的 int型变量.
B) 指针和数组的关系
①03-pointer_2.c
②03-pointer_3.c
③03-pointer_4.c
指针是C语言的灵魂
2) 定义
A)地址:
内存单元的编号
从0开始的非负整数
范围: 0 ~ FFFFFFFFH(4G-1)
B)指针:
指针就是地址, 地址就是指针.(指针,地址,内存单元编号, 两两等价)
指针变量: 存放 地址(内存单元编号) 的变量
3) 分类
A) 基本类型指针 -> int * p;
int i = 5;
int * p; // 指针变量; p, 变量名; 类型, int *, 存放int型变量 的地址;
p = &i; // 将 int型变量 i 的地址赋值给 指针变量.
printf("%d\n", *p); // *p, 以 p的内容 作为地址的 int型变量.
B) 指针和数组的关系
①03-pointer_2.c
#include <stdio.h> int main(void) { // 数组名: a // a: 地址常量, 存放数组a的地址, 第一个元素的地址. int a[5] = {1, 2, 3, 4, 5}; printf("%d \n", a[3]); printf("%d \n", *(a+3)); printf("%d \n", 3[a]); // 3, 偏移量 printf("%p \n", a+1); // 0022FF00 printf("%p \n", a+2); // 0022FF04 printf("%p \n", a+3); // 0022FF08 return 0; }
②03-pointer_3.c
#include <stdio.h> void showArray(int * pArr, int len) { int i; for (i = 0; i < len; ++i) { printf("%d \n", pArr[i]);// pArr[i] <=> *(pArr+i) } return; } // 确定一个数组: 首地址(数组名), 长度(元素的个数) int main(void) { int a[5] = {1, 2, 3, 4, 5}; showArray(a, 5);// a <=> &a[0], &a[0]的类型为 int * return 0; }
③03-pointer_4.c
#include <stdio.h> /* 指针变量的运算 1, 指针变量之间不能 加/乘/除 2, 如果两指针变量属于同一数组, 则可以 相减 3, 指针变量可以加减以整数 int a[5] = {1}; //假设:a的值为 1000H int * p = a; // p的值为 1000H, p指向的变量占4个字节 p+i == 1000H + i * 4 p-i == 1000H - i * 4 ++p , p++ <=> p = p+1 --p , p-- <=> p = p-1 */ int main(void) { int a[5] = {0, 1, 2, 3, 4}; int * p = NULL; p = a; //int * q; int * r; int * q, * r; // 不能定义成 int * q, r; q = &a[1]; // = a + 1 r = &a[4]; // = a + 4 printf("%p\n", r); // 0022FF00 printf("%p\n", q); // 0022FEF4 printf("%d\n\n", (r - q) ); // 3 /* printf("%d\n", *(p++)); // 0 printf("%d\n", *(p++)); // 1 printf("%d\n", *(p--)); // 2 */ printf("%d\n", *p); // 0 printf("%d\n", *(++p)); // 1 printf("%d\n", *(++p)); // 2 return 0; }
相关文章推荐
- 数据结构预备知识之指针,结构体和动态内存的分配与释放
- [C语言] 数据结构-预备知识指针
- [葫芦娃的成长之路]数据结构的预备知识
- [葫芦娃的成长之路]数据结构的预备知识
- [C语言] 数据结构-预备知识动态内存分配
- [C语言] 数据结构-预备知识跨函数使用内存
- 数据结构知识基础之指针
- 06-数据结构_预备知识-跨函数使用内存
- 1:数据结构之预备知识
- 数据结构预备知识(二)
- 04-数据结构_预备知识-结构体
- 05-数据结构_预备知识-动态内存的分配和释放
- 数据结构预备知识(一)
- 数据结构预备知识(三)
- [C语言] 数据结构-预备知识结构体
- 数据结构之C语言中指针和内存分配函数等知识
- 黑马程序员-Java基础知识预备之Java基本数据类型的包装类
- C++ Primer知识系列一:预备知识、数据及基本类型
- 数据结构基础知识核心归纳(二)
- (转)面试中数据结构的相关知识