本文章为本人原创,适合于刚入坑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语言入门理解指针的更多相关文章

  1. 深入理解C语言-深入理解指针

    关于指针,其是C语言的重点,C语言学的好坏,其实就是指针学的好坏.其实指针并不复杂,学习指针,要正确的理解指针. 指针是一种数据类型 指针也是一种变量,占有内存空间,用来保存内存地址 指针就是告诉编译 ...

  2. 小学生都看得懂的C语言入门(5): 指针

    现在已经学到C语言的后面了, 快学完咯.... (一)取地址运算 先来看一下sizeof 计算所占字节 #include<stdio.h> int main() { int a; a=; ...

  3. Go语言入门之指针的使用

    指针的使用: package main import "fmt" func zhi(){ a:= var b *int=&a //声明指针并赋值 *b=3 //改变内存地址 ...

  4. 深入理解C语言中的指针与数组之指针篇

    转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...

  5. 深入理解C语言中的指针与数组之指针篇(转载)

    前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...

  6. C语言指针专题——如何理解指针

    本文为原创,欢迎转发! 最近在研读C primer plus 5版中文版,老外写的,还是很经典的,推荐给读者们,有需要的朋友可以在这里购买:C primer plus 5版中文版 指针,传说中是C语言 ...

  7. C语言入门---第九章 C语言指针

    没学指针就是没学C语言! 指针是C语言的精华,也是C语言的难点. 所谓指针,也就是内存的地址,所谓指针变量,也就是保存了内存地址的变量.不过人们往往不会区分两者的概念,而是混淆在一起使用. ===== ...

  8. Go语言入门系列(五)之指针和结构体的使用

    Go语言入门系列前面的文章: Go语言入门系列(二)之基础语法总结 Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 1. 指针 如果你使用过C或C++,那你肯定对指针这个概念 ...

  9. C语言重点——指针篇(一文让你完全搞懂指针)| 从内存理解指针 | 指针完全解析

    有干货.更有故事,微信搜索[编程指北]关注这个不一样的程序员,等你来撩~ 注:这篇文章好好看完一定会让你掌握好指针的本质 C语言最核心的知识就是指针,所以,这一篇的文章主题是「指针与内存模型」 说到指 ...

随机推荐

  1. Java面试宝典2017

    JAVA面试.笔试题(2017版)                 欲想成功,必须用功!   目录 一.                  HTML&CSS部分................ ...

  2. StartDT AI Lab | 视觉智能引擎之算法模型加速

    通过StartDT AI Lab专栏之前多篇文章叙述,相信大家已经对计算机视觉技术及人工智能算法在奇点云AIOT战略中的支撑作用有了很好的理解.同样,这种业务牵引,技术覆盖的模式也收获了市场的良好反响 ...

  3. [LC] 1048. Longest String Chain

    Given a list of words, each word consists of English lowercase letters. Let's say word1 is a predece ...

  4. springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题

    有时候,当你把你的springboot项目打成可执行的jar,放在linux上启动时,发现启动超级慢: 这往往是因为springboot内置tomcat启动时实例化SecureRandom对象随机数策 ...

  5. python+selenium自动化测试之登录

    selenium_login.py import unittest from selenium import webdriver class LoginTest(unittest.TestCase): ...

  6. 调用支付JSAPI缺少参数:sign

    微信jsapi调用微信支付时报 :调用支付JSAPI缺少参数:sign 这个问题我查了很久,最后把前端的代码也拿过来看来,发现前端 sign的参数名传错了~~~~~~~前后端分离很容易出现这种问题,对 ...

  7. Laravel5.4 队列简单配置与使用

    概述 什么是队列? 百度百科是这样说的 “队列”是在传输过程中保存数据的容器. 举几个生活中例子: * iphone手机新款发布,三里屯iphone进的新货.大家要排队买,不能说一大堆人一起冲进去,那 ...

  8. QTP基本循环异常遍历(代码方式实现)

    0 环境 系统环境:win7 1 前言 在正常循环的基础下 添加异常处理遍历 一些基本操作 请看正常循环 https://www.cnblogs.com/my-ordinary/p/11739180. ...

  9. 用C#实现一个百度万年历

    目录 背景 实现步骤 关键点 结束语 背景 命理学是对人生命运规律的探索,以人的各式各样的数字(出生年月日.姓名笔划等)来推测人的性格与命运并占卜推测未来会发生的事情.古今中外都有相关方面的理论,中国 ...

  10. python语法基础-基础-变量和数据类型

    ###############   第一个python程序   ############### print("hello python") # 打印hello python # 分 ...