【笔记-C语言】 指针
2017-12-15 19:12
211 查看
指针存储的是内存地址,而内存地址是一个数字,所以*p等价于*0xffffffff(32位系统的指针)
int a; int *p;a等价于*p, p为一个int型的指针, *p作为一个整体时为int型
可以使用typedef int* INT 则INT p ; p为指针
typedef int a; (a指代int类型) int a;(a表示变量)
指针移动一位与指针类型相关
int a=10;
char *p=&a; 编译会出现警告
p+1移动一个字节(char)
在32位系统中,指针占四个字节,其中存放着指向的变量的地址值
指针包含:
自身所在的地址值
自身变量名
存储的变量的地址值
指针的类型
指向的数据的类型
void *p
通用指针,不可移动或取值,可赋值给任意类型的指针。c中可直接赋值,c++中需要类型转换
int *p
一级指针p+1代表移动指针类型一块(一个单位)的大小,本质为一级指针中所存地址值发生变化。对*p操作即为对p指向的变量的操作
int **pp
二级指针存着一级指针的地址,pp+1代表移动四个字节(32位系统中指针四个字节,在一级指针连续存储时+1才有意义)。因为指向的是一级指针,对*pp操作即为对pp指向的一级指针进行操作.对**p操作即为对pp指向的一级指针指向的变量进行操作
pp类型是int **(int型指针的指针),指向int
*。
int a = 10;
int *p = NULL;
int **pp = &p;
*pp = &a;
int *p[3]
指针数组,数组中元素为指针
char* val1[100] = {0}; 等价于
char**
val2 = (int**)malloc(sizeof(int*)*100);
int (*p)[3]
数组指针,p指向数组,p+1代表移动数组大小
int *p(int)
函数,返回值为int*,参数类型为int
int (*p)(int)
函数指针,返回值int,带一个参数int
函数指针使用:
void fun1(int a,char b){cout<<a<<endl;}
void (*)(int,char) 是函数指针的类型
void (*p)(int,char) 是定义函数指针对象p
====方式1
void (*p)(int,char) = NULL;//定义一个函数指针p,初始化为NULL
p = fun1;//指向函数
p(2,'a');//调用
====方式2
typedef void (*pfun)(int,char); //重定义类型
pfun p = NULL;
p = fun1;
p(2,'a');
const int *p或者int const *p 常量的指针
const在*p前,*p为一个int型的值,表示p指向的值不可改变
(不可通过p指针修改变量)
int *const p; 常量指针(形容指针是常量,不能改变)
const 在p前,表示p不可移动,指向的值可变(p的内存地址
值不可变)
void getMemory(char *p){ p=(char*)malloc(10);}
该函数不能给p分配内存,而且会造成内存泄漏。因为编译器要为每个参数制作临时副本,p的副本_p(_p指向p),修改_p指向的内容,也就是p指向的内容被修改。但是,为_p分配内存相当于让_p的指向另一片内存,而p指向的地方不变。
在函数中改变指针的指向无效。
在函数中分配的正确方法为:
1) void getMemoryA(char **p){*p=(char*)malloc(10);}
2) char *getMemoryB(){ return (char*)malloc(10);}
调用时:
char *p = NULL;
getMemoryA(&p); 或 p = getMemoryB();
野指针:指向垃圾内存,没有指向null的指针。
产生原因:1)指针变量没有被初始化为null;2)free内存后没有指向null;3)指针操作超过了变量生存周期。
相关文章推荐
- c语言指针笔记
- C语言学习笔记15——指针的本质分析
- C语言与指针学习笔记
- 黑马程序员——IOS学习笔记(C语言指针)
- [黑马程序员]06[C语言]指针部分笔记总结-01
- C语言深度剖析学习笔记-指针、数组、内存、函数
- C语言中二维数组与指针的笔记
- 黑马程序员——C语言笔记之指针
- 数组和指针————C语言学习笔记1
- C语言笔记->通过指针引用数组
- C语言基本概念笔记《三》之指针,数组,动态数组的创建
- C语言提高班学习笔记 lesson5 变量、指针
- C语言学习笔记(1)——指针(上)
- C语言笔记——字符数组与字符指针的区别
- [黑马程序员]07[C语言]指针部分笔记总结-02
- C语言指针笔记
- C语言学习笔记-8.指针
- C语言学习笔记(21) 函数指针、回调函数及复杂指针阅读技巧
- C语言之指针学习笔记
- C语言中的指针笔记