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语言最核心的知识就是指针,所以,这一篇的文章主题是「指针与内存模型」 说到指 ...
随机推荐
- nginx+tomcat配置集群
安装nginx以及两个以上tomcat,并启动 配置集群nginx/conf/nginx.conf文件 说明:server_list为名字,可以在每台服务器ip后面添加weight number,设置 ...
- plsql中文显示问号
1. select userenv('language') from dual 2. 复制查询的值配置系统环境变量 NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 3.配置系统环 ...
- 学习C++之前要先学习C语言吗?
C++ 读作“C加加”,是“C Plus Plus”的简称.顾名思义,C++ 是在C语言的基础上增加新特性,玩出了新花样,所以叫“C Plus Plus”,就像 iPhone 7S 和 iPhone ...
- TPO1-1 Groundwater
If the pores are large,the water in them will exist as drops too heavy for surface tension to hold,a ...
- 3dmax2016卸载/安装失败/如何彻底卸载清除干净3dmax2016注册表和文件的方法
3dmax2016提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dmax2016失败提示3dmax2016安装未完成,某些产品无法安装,也有时候想重新安装3 ...
- MAC上安装maven以及配置Intellij IDEA
大前提:java环境已经配置好 maven是对于java工程的管理 一.maven安装到mac 1.首先,maven下载地址http://maven.apache.org/download.cgi 点 ...
- 数字签名和数字证书等openssl加密基本术语
openssl 算法基础 1.1 对称算法 : 密钥相同,加密解密使用同一密钥 1.2 摘要算法:无论用户输入的数据什么长度,输出的都是固定长度的密文:即信息摘要,可用于判断数据的完整性:目前常用的有 ...
- perf4j @Profiled常用写法
以下内容大部分摘抄自网络上信息. 1.默认写法 @Profiled 日志语句形如: 2009-09-07 14:37:23,734 [main] INFO org.perf4j.TimingLogge ...
- 虚拟网卡 TUN/TAP 驱动程序设计原理(经典)
盗用-收藏 简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱 ...
- 林轩田机器学习基石笔记3—Types of Learning
上节课我们主要介绍了解决线性分类问题的一个简单的方法:PLA.PLA能够在平面中选择一条直线将样本数据完全正确分类.而对于线性不可分的情况,可以使用Pocket Algorithm来处理.本节课将主要 ...