C——指针总结
来源:互联网 发布:淘宝搜索模型 编辑:程序博客网 时间:2024/06/07 23:48
1. 介绍
指针是一个值为内存地址的变量
ptr = &var; //将变量var的地址赋给变量ptr,变量ptr就是指向变量var的指针
而对于ptr和&var来说,ptr是一个变量,&var则是一个常量,变量可以被赋值改变,而常量不可以
2. 获取值
当得到一个指针时,就可以得到这个指针所在的值
var1 = *ptr //此时var1==var
符号*,叫间接运算符,也叫取值运算符,用于获取指针所指向的地址中存储的值
也就是说,
ptr = &var
和var1 = *ptr
与var1 = var
是等效的
3. 特点
- 变量的地址通常是变量首字节所在的地址
- 对指针加1,等价于对指针的值(指针的值,而不是指针所指向的变量)加上它所指向的对象的字节大小
4. 数组指针
1. 数组名是该数组首元素的地址
arr = &arr[0];
2. 鉴于特点中的第二点,所以对数组指针加1,指针就指向了数组的下一个元素
arr + 2 == &arr[2]; //true&arr[0] + 2 == &arr[2]; //true以上两条语句是等效的
3. 访问数组元素可以采用一下方式
arr[2] == *(arr + 2);arr[0] == *arr;arr[0] == *(&arr[0]);
4. 函数原型声明(参数为数组)
int sum(int *arr, int n);int sum(int *, int);int sum(int arr[], int n);int sum(int [], int);以上四种形式是等价的
5. 函数定义(参数为数组)
int sum(int *arr, int n){ //code}int sum(int arr[], int n){ //code}以上两种形式等价
5. 注意
- 不能对未初始化的指针进行取值或赋值
int *ptr;*ptr = 5;
最好不要有以上行为,由于ptr没有被初始化,因此它的值(指针的值是地址,即地址是随机的)是随机的,不知道5会被存储到什么地方,可能无害,也可能会覆盖程序的数据(指向了程序的某个变量的地址),导致程序错误甚至崩溃。
因此,在声明一个指针的同时,最好将其初始化(指明该指针所指向的变量地址)
2. 若不希望函数改变数组,那么就对函数的形参使用const
int sum(const [], int);int sum(const int arr[], int n){ //code}
由于数组通过参数的方式传递给函数进行操作的时候,传递的是数组的地址,因此函数对数组的操作会改变数组的内容。
使用const关键字,就是告诉编译器,函数应当把arr所指向的数组作为包含常量数据的数组对待
==注意:==
这样使用const并不代表原始数组是固定不变的,这只是说明函数在处理数组时,应该把数组当作固定不变的
阅读全文
0 0
- C——指针总结
- C——指针总结
- C语言提高之——C和指针总结
- C语言入门——指针(一)自学总结
- C语言之知识点总结——const指针
- 黑马程序员——C 语言指针总结
- 黑马程序员—C语言—指针理解总结
- 【Linux C】总结——数组、指针and内存管理
- C指针总结--指针运算
- c指针总结
- c语言指针总结
- C语言指针总结
- C 指针详细总结
- C语言指针总结
- C语言指针总结
- c 指针总结
- C语言指针总结
- C++Void*指针总结!
- iOS 原生UIActivityViewController(分享功能)
- Broadcast Receiver 广播机制
- LRU原理与实现
- tq2440 pwm 驱动
- 12 java文件操作编程
- C——指针总结
- C语言基本编程题
- 知耻而后勇
- 《MySQL入门很简单》学习笔记(5)之第5章操作数据库(关键词:数据库/创建数据库/删除数据库/存储引擎)
- 视频 秒开,美颜,卡顿
- Linux驱动学习之:PWM驱动
- Django之分页功能
- C++
- 使用WindowManager实现悬浮窗