指针值传递所遇到的问题
来源:互联网 发布:淘宝拍卖房产靠谱吗 编辑:程序博客网 时间:2024/05/22 01:27
我也不怕丑,我是个小菜鸟,不如众位大牛那么牛掰.这是我第一次发表微博,如有不妥当请批评指正.今天我要说的是在学习C语言指针时,在指针变量所指向内存空间所存储的值传递过程中遇到的问题.所谓指针,不用我在这里瞎白话,他就是一种数据类型.指针变量和指针所指向的内存空间是两个不同的概念.指针变量也是一种变量,指针变量指向谁,就是把谁的地址赋值给指针变量.而"*"操作符操作的是指针变量指向的内存空间.这样几个概念就把我们给弄糊涂了.
第一 野指针指向空间
```````
inta = 100;
int *p;p = a; //把a的值赋值给指针变量p,p为野指针,ok,不会有问题,但没意义
p = 0x1234;//给指针变量p赋值,p为野指针,ok,不会有问题,但没有意义
*p = 1000;//操作野指针指向未知区域,内存出问题,err
``````
第二 const修饰的指针变量
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intmain(void)
{
//const修饰一个变量为只读
const int a = 10;
a = 100; //err 指针变量,指针指向的内存, 2个不同概念
char buf[] = "aklgjdlsgjlkds";
//从左往右看,跳过类型,看修饰哪个字符
//如果是*,说明指针指向的内存不能改变
//如果是指针变量,说明指针的指向不能改变,指针的值不能修改
const char *p =buf;
// 等价于上面 char const *p1 = buf;
p[1] = '2'; //err
p = "agdlsjaglkdsajgl"; //ok
char * const p2 =buf;
p2 = "salkjgldsjaglk"; //err
const char * constp3 = buf; //p3为只读,指向不能变,指向的内存也不能变
return 0;
}
第三 指针作为值传递遇到的问题
1 指针作为值传递虽然不改变形参的值,但是指针操纵空指针指向的内存,那么就会发生段错误.以下即是实例.
上例虽然把指针赋值为空指针,但是,
fun(p); //值传递,形参视为野指针,形参修改不会影响实参
printf("*p = %d\n", *p);//err,操作空指针指向的内存
2 有人说既然操作空指针指向内存,可能会舍本求末的有以下方法:
各位看官,不知道你们发现了问题没有?我开始也以为万事大吉了.您看,我给指针初始化了,我给指针变量也分配了动态内存空间,编译成功了,哪里还有问题呢?听了我室友的指点我才发现问题.c语言语法规定,局部变量在函数块作用域执行完后,其内存会自动释放.所以说我改来改去在主函数中还是在操纵空指针.根本就是在传递没有意义的指针.程序dang掉.
3 那么,随之而来的解决办法也来了.不多说,直接上图
好.万事大吉.
- 指针值传递所遇到的问题
- 解决频繁指针申请和释放所遇到的问题
- Python中指针式传递的函数遇到的问题
- 指针传递遇到的问题--内存角度分析
- hibernate 所遇到的问题
- 今天所遇到的问题
- qt所遇到的问题
- EditText所遇到的问题
- selenium 所遇到的问题
- 指针值传递问题
- 使用Handler在线程之间传递消息所遇到的问题及解决方法
- 关于解决多个viewpager嵌套所遇到的事件传递问题
- C 函数值传递和指针传递的效率问题
- 函数指针的传递问题
- 指针传递的小问题
- 指针参数传递的问题
- 指针常遇到的问题
- 面试遇到的指针问题
- jvm优化—— 图解垃圾回收
- Python3 生成随机身份证号码
- 171209 逆向-JarvisOJ(病毒数据分析)(3)
- mnist_cnn
- 【资料】生成对抗网络(GAN,Generative Adversarial Networks)
- 指针值传递所遇到的问题
- 卷积神经网络(一)- Foundations of Convolutional Neuron Networks
- 欢迎使用CSDN-markdown编辑器
- 如何调用另一个python文件中的代码
- 吴恩达机器学习笔记(二)(附编程作业链接)
- JavaScript学习-面向对象与原型4
- navicat premium出现PostgreSQL: column “rolcatupdate” does not exist error?
- PythonAnyWhere免费部署python类网站
- [leetcode]283. Move Zeroes[facebook]