#深入理解指针变量

举个错误栗子:

//以下代码的目的是输出100和1000,但输出结果只有一个100
#include<stdio.h>
#include<malloc.h>
int *zhizhen;
void junhe(int *p)
{
*zhizhen=1000;//原因出现在这
p=zhizhen;
}
int main()
{
int *p;
p=(int *)malloc(100);
*p=100;
printf("%d\n",*p);
free(p);
junhe(p);
printf("%d\n",*p);
return 0;
}

运行结果:

100

--------------------------------
Process exited after 5.545 seconds with return value 3221225477
请按任意键继续. . .

int *q;

*q=100;

这种直接给指针变量赋值的代码是错误的,“在C语言中可以直接给指针指向的数据赋值“是正确的,但此时指针p并没有指向什么东西,所以自然不可以直接对指针变量(*p)进行赋值;而对于指向动态内存的指针,是可以对指针变量直接赋值的,举个栗子:

 

#include<stdio.h>
#include<malloc.h>
int main()
{
int *p;
int *q=(int *)malloc(4);
//将动态分配的4个字节的内存的地址赋给了指针变量 q
*q=100;
//向指针变量 q 中所储存的地址对应的动态内存放进了’100‘
printf("%d\n",*q);
//此时动态内存中放的使’100‘
p=q;
//将指针变量 q 中所储存的地址赋给了指针变量 p ,此时 p 所储存的地址对应的内存即为上面动态分配的内存
*p=1000;
//向指针变量 p 中所储存的地址对应的内存赋值’1000‘
printf("%d\n",*p);
printf("%d\n",*q);
//所以说现在无论是输出 *p 还是 *q ,都是将此时动态内存中所储存的’1000‘给输出来
free(q);
}

运行结果:

100
1000
1000 --------------------------------
Process exited after 0.8258 seconds with return value 1
请按任意键继续. . .

总结:在指针变量没有初始化的时候,使用“ * 指针变量 ”是错误的,这就和其他类型变量没有初始化是一个类型的问题;

         对于指针变量来说,有没有初始化不取决于它指向的内存中有没有储存数据,而取决于它有没有储存地址,如上方代码栗子:

         指针变量有没有初始化?有,它储存了咱们手动分配的4个字节的内存的地址,所以完全可以通过给” * q “赋值来更换动态内存中储存的数据;

 

大一C语言学习笔记(9)---指针篇--从”内存的使用“和“流程控制”的角度来理解“指针变量的使用‘的更多相关文章

  1. 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项

    博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...

  2. 大一C语言学习笔记(8)---指针篇--动态内存是什么?与静态内存有什么区别?怎么使用动态内存,有什么需要注意的地方?

    静态内存指的是在编译时系统自动给其分配的内存,运行结束后会自动释放:静态内存是在栈中分配的: 动态内存是我们程序员手动分配的内存,正常情况下,程序运行结束后,也不会自动释放,所以为了避免发生未知的错误 ...

  3. 大一C语言学习笔记(2)---快捷键篇

    大家好,博主呢,是一位刚刚步入大一的软件工程专业的大学生,之所以写博客,是想要与同样刚刚接触程序员一行的朋友们一起讨论,进步,在这里记录我的一些学习笔记及心得,希望通过这些点点滴滴的努力,可以让我们离 ...

  4. 大一C语言学习笔记(6)---自省篇--流程控制;break,continue,return间的异同;数组应用到循环语句中需要注意的问题;++i 和 i++的异同等。

    下面是傻瓜博主"曾经"犯过的错和一些心得:        ༼ つ ◕_◕ ༽つ 1.要想流程控制学好,一定要学会化繁为简,举栗子: 三目运算符 (略?略:略)---就是一个数字嘛, ...

  5. 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?

    "指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...

  6. 大一C语言学习笔记(10)---编程篇--制作简易计算器,支持加,减,乘,除,取余运算,要求 0 bug

    博主自开学初就一直在努力为自己的未来寻找学习方向,学习编程嘛,尽量还是要抱大腿的,所以我就加入了我们学校的智能设备研究所,别的不说,那的学长们看起来是真的很靠谱,学长们的学习氛围也超级浓厚,所以我就打 ...

  7. 大一C语言学习笔记(11)---编程篇--写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积,要求 0 bug;

    考核内容: 写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积: 答案: #include<stdio.h ...

  8. 大一C语言学习笔记(4)---自省篇

    博主"曾经"做过的傻事: #你有的*没打全 #你用/的时候没考虑()是一对的 #printf随后加\n #所有变量只要用,就一定要定义数据类型 #sqrt()代表根号 #inclu ...

  9. GO1.6语言学习笔记1-基础篇

    一.GO语言优势   可直接编译成机器码,Go编译生成的是一个静态可执行文件,除了glibc外没有其他外部依赖 静态类型语言,但是有动态语言的感觉 语言层面支持并发.Goroutine和channel ...

随机推荐

  1. P5180-[模板]支配树

    正题 题目链接:https://www.luogu.com.cn/problem/P5180 题目大意 给出\(n\)个点的一张有向图,求每个点支配的点数量. \(1\leq n\leq 2\time ...

  2. YbtOJ#631-次短路径【左偏树,最短路】

    正题 题目链接:https://www.ybtoj.com.cn/contest/114/problem/1 题目大意 给出\(n\)个点\(m\)条边的一张无向图,对于每个点\(i\)求不经过\(i ...

  3. JVM探针与字节码技术

    JVM探针是自jdk1.5以来,由虚拟机提供的一套监控类加载器和符合虚拟机规范的代理接口,结合字节码指令能够让开发者实现无侵入的监控功能.如:监控生产环境中的函数调用情况或动态增加日志输出等等.虽然在 ...

  4. MacOS Typora集成SM.SM图床 实现自动上传图片

    MacOS Typora集成SM.SM图床 实现自动上传图片 此为PicGo-Core (Command line) (OpenSource)配置方法 参照官网 https://support.typ ...

  5. java实现责任链模式的小demo

    //一个请假请求 public class LeaveRequest { private int leaveDays; private String name; public void leave() ...

  6. 分享一份软件测试项目实战(web+app+h5+小程序)

    大家好,我是谭叔. 本次,谭叔再度出马,给大家找了一个非常适合练手的软件测试项目,此项目涵盖web端.app端.h5端.小程序端,可以说非常之全面. 缘起 在这之前,谭叔已经推出了九套实战教程. 但是 ...

  7. 【UE4 C++】 Config Settings配置文件(.ini)

    简介 常见存储路径 \Engine\Config\ \Engine\Saved\Config\ (运行后生成) [ProjectName]\Config\ [ProjectName]\Saved\Co ...

  8. 【UE4 C++】 解析与构建 Json 数据

    准备条件 Json 格式 { "Players":[ { "Name": "Player1", "health": 20 ...

  9. Sequence Model-week1编程题1(一步步实现RNN与LSTM)

    一步步搭建循环神经网络 将在numpy中实现一个循环神经网络 Recurrent Neural Networks (RNN) are very effective for Natural Langua ...

  10. [Beta]the Agiles Scrum Meeting 4

    会议时间:2020.5.15 21:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 yjy 增加教学计划面板,修复bug tq 实现查看.删除测试点功能 wjx 实现批量创建结对项目功能 ...