0423学习总结(各种指针)
来源:互联网 发布:淘宝怎么看宝贝流量 编辑:程序博客网 时间:2024/06/13 22:43
1.数组名作为函数退化的指针
void fun(int *a)/void fun(int a[])
2.指针数组:是一个数组,数组里面保存的是指针
char *str[];
3.const关键字:
const:constant(不变)修饰变量的时候,希望将变量变成“常量”
(1)修饰变量
int const a = 12/const int a = 12
a的值的大小不能改变
(2)修饰指针
int const *p
const现在先遇到*,所以*p不能改变,但是p能重新指向另外的变量
int *const p
const现在遇到p,所以p不能指向别的变量,但是*p可以
int const *const p
第一个修饰*p,第二个修饰p,两个都不能改变
(3)const修饰的变量可以改变
例子:int const a = 12
int *p = (int *)&a
*p = 13
(4)const什么时候用?
修饰形参中的指针变量,也可以修饰环境中的其他变量
4.指针与数组的区别
(1)数组名表示的是数组首地址元素的地址,数组一旦被定义,分配的地址就确定,所以数组名是指针常量
(2)数组是静态分配内存空间,并且是连续的。指针是动态分配内存空间。数组的扩展性差,利用率低,造成浪费,指针则相反。
(3)数组直接访问内存,指针是间接访问内存,数组使用不灵活,比较安全,但是使用不当会出现溢出。指针使用灵活,但是使用不当会造成内存泄漏或段错误。
(4)char *str[] = "hello"
(5)数组名作为函数的参数,退化为指针处理。
5.指针与字符串
字符在c语言主要有2种处理方式
1.通过字符数组
2.通过字符指针变量指向这个字符串
char *str = “hello” //不是指hello赋值给str,而是保存在.txt
分配内存:
1..txt段分配空间保存hello
2.分配栈空间保存局部变量
6.详细介绍字符串
c语言中没有字符串这个变量,但是java中有
c语言中字符串的本质,就是指针指向头,固定尾部的地址相连的一段内存
他在内存中就是多个字节连续分布构成
三个核心:
1.指针指向头:首地址
2.固定尾部
3.各个字符的地址是连续的
强调:1.指向字符串的指针和字符串是两回事
2.在c语言中,它没有字符常量,只有字符串常量
7.指针和函数
联系:1.指针指向函数
(1)定义一个函数的时候,也会给它分配一个地址
左右法则:int (*p)(int,int);
result = (*p)(a,b)
总结:1.定义一个函数指针
2.绑定函数指针,也就是让函数指针指向一个函数的地址
3.调用,用*()
result = add(a,b) ==》result (*p)(a,b)
为什么要引出函数指针?主要是为了函数指针能调用不同的函数,如果只是通过函数名,只能调用一个函数
2.函数的参数是指针变量
也就是传地址,在c语言中:传值和传址,本质上都是传值
3.函数的返回值是指针
注意:这个地址不能是函数里局部变量的地址
8.二级指针
概念:指向指针的指针
int a=12;
int *p=&a; //一级指针
int **pp=&p; //二级指针
a=12=*p=**pp / p=&a=*pp / pp=&p
掌握:1.明白指向指针的指针是什么意思
2.画个图,有助于理解
3.推出一些公式
9.野指针和段错误
野指针:指针变量指向不确定的地址空间或者指向了一个确定的地址空间,但是引用空间的结果不可预知,这就是野指针。
危害:1.导致文件错误,其实就是地址错误
2.没有结果,要避免
3.发生连环错误,循环叠加
原因:1.使用指针之前,没有初始化或者没有指向确定的空间
2.不清楚某些地址空间的访问权限,试图修改这些空间里面的值
0地址虽然存在,但是受系统保护,没有操作权限。
3.有权限,但是超过了这个权限
比如:访问空间的时候,内存越界会导致野指针,进而导致段错误
如何避免:1.养成良好的编码习惯,定义指针让他指向NULL
2.使用指针之前,一定要对其初始化
3.使用变量之前,检查指针是否为空
void fun(int *a)/void fun(int a[])
2.指针数组:是一个数组,数组里面保存的是指针
char *str[];
3.const关键字:
const:constant(不变)修饰变量的时候,希望将变量变成“常量”
(1)修饰变量
int const a = 12/const int a = 12
a的值的大小不能改变
(2)修饰指针
int const *p
const现在先遇到*,所以*p不能改变,但是p能重新指向另外的变量
int *const p
const现在遇到p,所以p不能指向别的变量,但是*p可以
int const *const p
第一个修饰*p,第二个修饰p,两个都不能改变
(3)const修饰的变量可以改变
例子:int const a = 12
int *p = (int *)&a
*p = 13
(4)const什么时候用?
修饰形参中的指针变量,也可以修饰环境中的其他变量
4.指针与数组的区别
(1)数组名表示的是数组首地址元素的地址,数组一旦被定义,分配的地址就确定,所以数组名是指针常量
(2)数组是静态分配内存空间,并且是连续的。指针是动态分配内存空间。数组的扩展性差,利用率低,造成浪费,指针则相反。
(3)数组直接访问内存,指针是间接访问内存,数组使用不灵活,比较安全,但是使用不当会出现溢出。指针使用灵活,但是使用不当会造成内存泄漏或段错误。
(4)char *str[] = "hello"
(5)数组名作为函数的参数,退化为指针处理。
5.指针与字符串
字符在c语言主要有2种处理方式
1.通过字符数组
2.通过字符指针变量指向这个字符串
char *str = “hello” //不是指hello赋值给str,而是保存在.txt
分配内存:
1..txt段分配空间保存hello
2.分配栈空间保存局部变量
6.详细介绍字符串
c语言中没有字符串这个变量,但是java中有
c语言中字符串的本质,就是指针指向头,固定尾部的地址相连的一段内存
他在内存中就是多个字节连续分布构成
三个核心:
1.指针指向头:首地址
2.固定尾部
3.各个字符的地址是连续的
强调:1.指向字符串的指针和字符串是两回事
2.在c语言中,它没有字符常量,只有字符串常量
7.指针和函数
联系:1.指针指向函数
(1)定义一个函数的时候,也会给它分配一个地址
左右法则:int (*p)(int,int);
result = (*p)(a,b)
总结:1.定义一个函数指针
2.绑定函数指针,也就是让函数指针指向一个函数的地址
3.调用,用*()
result = add(a,b) ==》result (*p)(a,b)
为什么要引出函数指针?主要是为了函数指针能调用不同的函数,如果只是通过函数名,只能调用一个函数
2.函数的参数是指针变量
也就是传地址,在c语言中:传值和传址,本质上都是传值
3.函数的返回值是指针
注意:这个地址不能是函数里局部变量的地址
8.二级指针
概念:指向指针的指针
int a=12;
int *p=&a; //一级指针
int **pp=&p; //二级指针
a=12=*p=**pp / p=&a=*pp / pp=&p
掌握:1.明白指向指针的指针是什么意思
2.画个图,有助于理解
3.推出一些公式
9.野指针和段错误
野指针:指针变量指向不确定的地址空间或者指向了一个确定的地址空间,但是引用空间的结果不可预知,这就是野指针。
危害:1.导致文件错误,其实就是地址错误
2.没有结果,要避免
3.发生连环错误,循环叠加
原因:1.使用指针之前,没有初始化或者没有指向确定的空间
2.不清楚某些地址空间的访问权限,试图修改这些空间里面的值
0地址虽然存在,但是受系统保护,没有操作权限。
3.有权限,但是超过了这个权限
比如:访问空间的时候,内存越界会导致野指针,进而导致段错误
如何避免:1.养成良好的编码习惯,定义指针让他指向NULL
2.使用指针之前,一定要对其初始化
3.使用变量之前,检查指针是否为空
0 0
- 0423学习总结(各种指针)
- 各种指针类型总结
- 指针学习总结(数组指针,指针数组)
- 指针学习总结(函数指针,指针型函数)
- C中各种指针的总结
- 初识指针的学习总结(1)
- 0422学习总结(内存、指针、关键字)
- 指针学习总结
- 指针学习总结
- 今日学习总结指针
- 智能指针学习总结
- 指针的学习总结
- 指针类型学习总结(函数指针、数组指针和指针数组)
- 各种指针分类总结 + 指针间的赋值关系
- 指针类型学习总结--迷途指针
- 指针类型学习总结-- this指针
- WordPress学习笔记(一):各种问题总结
- C++STL学习(7)各种容器总结
- 不错的技术网站
- Android 锁定屏幕 不可解锁
- SQL Server2014数据库的备份和还原
- 垃圾陷阱
- CATideLayer使用
- 0423学习总结(各种指针)
- 不使用"+"," -"操作符完成加法运算
- VS2008开发FFmpeg应用
- python初级教程:入门详解
- Android 文件下载
- 《统计学习方法》学习笔记(6)-- 决策树-附代码(sklearn)
- 软件测试基础——fault、error and failure
- Android WebView加载https网页(亲测)
- Java setReuseAddress