C语言入门理解指针
本文章为本人原创,适合于刚入坑C语言,对于指针的定义和用法模糊不清的同学,如有不正,请各位指出。
从根本来说,指针变量也是变量,只是int变成了int *,以此类推。只不过指针变量里面放的内容是普通变量在存储空间的地址(某种奇怪的16进制地址格式,感兴趣可自行百度)
定义指针变量的格式:int/double/...* studentp;
所以在给指针变量赋值的时候就应该:studentp=&student;
那么如何通过指针来获取student的值就可以直接:某变量=*studentp; 这里一定不要和定义指针变量搞混!!!
函数指针和普通的指针其实一样,无非就是把函数名给了一个函数指针变量,在获取指针变量指向的函数的时候也是指针变量前面加一个*号
那么有人问了,我写的代码以前也没用过指针变量照样运行,那指针变量是多此一举的东西吗?
必然不是的,一个很经典的问题:swap交换——如果要定义一个swap函数,交换两个变量的值,如何实现?
有人说以下代码就行,并没有用到指针呀!
#include <stdio.h> void swap(int a,int b);
int main(void) {
printf("小柠檬开课了!\n"); int a=,b=;
swap(a,b);
printf("主函数内部a=%d,b=%d\n",a,b);
return ;
}
void swap(int a,int b){
int tmp;
tmp=a;
a=b;
b=tmp;
printf("swap函数内部a=%d,b=%d\n",a,b);
}
输出:

答:C语言编程是面向过程的编程,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。如果我需要继续在主函数里面用到ab交换完成的值,那么这个函数写的就很失败,而且C语言返回值只能有一个,就无法使用返回的操作得到结果。
有人可能会问,为什么我swap里面分明让ab交换了,结果在main函数里面没有用呢?
答:这个就涉及到运行机制的原理了,每一个函数都独占一个内存空间,swap空间的ab和main空间的ab显然不是同一对ab,所以无论swap怎么折腾都不能影响main里面的东西。
如果用到指针变量的话,那么结果就会不一样。
现在更改成指针变量的代码:
#include <stdio.h> void swap(int *a,int *b);
int main(void) {
printf("小柠檬开课了!\n"); int a=,b=;
swap(&a,&b);
printf("主函数内部a=%d,b=%d\n",a,b);
return ;
} void swap(int *a,int *b){
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
printf("swap函数内部a=%d,b=%d\n",*a,*b);
}
输出:

这里swap的两个形参是指针变量,用于接收main函数传来的a(main)和b(main)的地址,swap中指针变量a(swap)和b(swap)存着a(main)和b(main)的地址,从而通过*a和*b的方式直接更改main中a(main)和b(main)的值。
这就是运用指针的好处。
C语言入门理解指针的更多相关文章
- 深入理解C语言-深入理解指针
关于指针,其是C语言的重点,C语言学的好坏,其实就是指针学的好坏.其实指针并不复杂,学习指针,要正确的理解指针. 指针是一种数据类型 指针也是一种变量,占有内存空间,用来保存内存地址 指针就是告诉编译 ...
- 小学生都看得懂的C语言入门(5): 指针
现在已经学到C语言的后面了, 快学完咯.... (一)取地址运算 先来看一下sizeof 计算所占字节 #include<stdio.h> int main() { int a; a=; ...
- Go语言入门之指针的使用
指针的使用: package main import "fmt" func zhi(){ a:= var b *int=&a //声明指针并赋值 *b=3 //改变内存地址 ...
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- 深入理解C语言中的指针与数组之指针篇(转载)
前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...
- C语言指针专题——如何理解指针
本文为原创,欢迎转发! 最近在研读C primer plus 5版中文版,老外写的,还是很经典的,推荐给读者们,有需要的朋友可以在这里购买:C primer plus 5版中文版 指针,传说中是C语言 ...
- C语言入门---第九章 C语言指针
没学指针就是没学C语言! 指针是C语言的精华,也是C语言的难点. 所谓指针,也就是内存的地址,所谓指针变量,也就是保存了内存地址的变量.不过人们往往不会区分两者的概念,而是混淆在一起使用. ===== ...
- Go语言入门系列(五)之指针和结构体的使用
Go语言入门系列前面的文章: Go语言入门系列(二)之基础语法总结 Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 1. 指针 如果你使用过C或C++,那你肯定对指针这个概念 ...
- C语言重点——指针篇(一文让你完全搞懂指针)| 从内存理解指针 | 指针完全解析
有干货.更有故事,微信搜索[编程指北]关注这个不一样的程序员,等你来撩~ 注:这篇文章好好看完一定会让你掌握好指针的本质 C语言最核心的知识就是指针,所以,这一篇的文章主题是「指针与内存模型」 说到指 ...
随机推荐
- 58)PHP,后台登录步骤示意图
注意上面的action提交位置: 并且注意下面的两个东西:
- 1)public,provite和protect不能放在函数函数头
今天我才知道,原来这三个修饰的东西,只是用在类里面方法,怪不得一个叫方法,一个叫函数了,原来就是区分他们,哎, 今天遇到这么一个问题: <?php //header('Content-type: ...
- Margin of Error|sample size and E
8.3 Margin of Error 由该公式可知: To improve the precision of the estimate, we need to decrease the margin ...
- 概率/期望DP初步——BZOJ1415 聪聪和可可
期望相关: 数学期望,可以简单理解的加权平均数.设有一系列的值$x_i$,每个值被取到的概率为$p_i$,则期望$E=\sum\limits_{i=1}^n p_i x_i$. 期望具有线性性:$$E ...
- Java IO: 字节和字符数组
原文链接 作者: Jakob Jenkov 译者:homesick 内容列表 从InputStream或者Reader中读入数组 从OutputStream或者Writer中写数组 在java中 ...
- 接口测试-chap6-获取页面动态token
1.在发起某些请求时,可能会要求必须是从某个页面进行请求,此时会验证页面的token 2.这个token是动态生成的,每次请求时值都是不同的, 不可以通过fiddler抓取的值作为固定值传入,通过fi ...
- 忘记mysql密码后重置密码
https://jingyan.baidu.com/album/c275f6ba479ca9e33d7567ee.html?picindex=4 找不到mysql的my.ini文件问题: https: ...
- 吴裕雄--天生自然HTML学习笔记:HTML 元素
HTML 文档由 HTML 元素定义. HTML 元素 开始标签 * 元素内容 结束标签 * <p> 这是一个段落 </p> <a href="default. ...
- php--判断是否是手机端
function is_mobile_request(){ $_SERVER['ALL_HTTP'] = isset($_SERVER['ALL_HTTP']) ? $_SERVER['ALL_HTT ...
- [转载] 自定义标签,jsp调用java类
自己懒得做笔记,借用一下. 之前例子已经写好了,由于时间关系一直没有发布,这次带来的是关于taglib中的<tag>的基本功能已经介绍完毕了,在taglib中我们发现有一个标签叫做< ...