指针

关于初始化

  • 不初始化

例如:

#include<stdio.h>int main(){int i;printf("%d\n",i);return 0;
}

如果不赋值的情况下,运行结果会是一个垃圾值;

在Dev-C++中运行结果是0

在VC++6.0的编译环境下,会是一个很大的随机数

  • 初始化

例如:

#include<stdio.h>int main(){int *p;  //定义一个指针变量,变量名为p,类型是int *int i=5;p=&i;  //把i的地址放到变量p里面,指针变量进行初始化 printf("*p=%d,i=%d\n",*p,i);  //*p:是取出以p变量内容为地址的那个变量,*p==i;//scanf("%d",&i);  //把i输入一个整数,放入i的内存单元当中;i是变量,把i的地址取出来,把整型变量放入地址当中return 0;
}


指针变量一定要初始化

常见错误

  1. 指针变量未进行初始化
#include<stdio.h>int main(){int *p;  //定义指针变量p int i=5;*p=i;  //p的内容没有进行初始化,为一个垃圾值 return 0;
}

2. 指针变量没有进行初始化;等号两边变量的类型不一致

#include<stdio.h>int main(){int *p;  //定义指针变量p int *q;int i=5;p=&i; //p变量指向i,由p可找到i *q=p;  //指针变量没有进行初始化;等号两边变量的类型不一致 //*q:int类型;  p:int *类型 return 0;
}
  1. 参数传递
#include<stdio.h>void swap(int i,int j);int main(){int a=2;int b=5;swap(a,b);printf("a=%d,b=%d\n",a,b);return 0;
}void swap(int x,int y){int t;t=x;x=y;y=t;return;
}

值传递,互换的是swap函数中的a和b的值,也就是形参中的x和y的值

void swap(int x,int y){

因为是在函数内部定义的变量,是局部变量,运行结束后,swap中的空间被释放

相当于互换的是局部变量的内存空间,而不是主函数中的内存空间,只是进行了值传递

在局部变量中进行的任何操作对主函数没有任何影响

运行结果:a=2,b=5

没有进行交换

参数传递指针实现

#include<stdio.h>void swap(int*,int*);int main(){int a=2;int b=5;swap(&a,&b);printf("a=%d,b=%d\n",a,b);return 0;
}void swap(int *p,int *q){int t;t=*p;*p=*q;*q=t;return;
}

主函数中

swap(&a,&b);
void swap(int *p,int *q){

地址传递

p接收a的地址;q接收b的地址

*p是指以p变量内容为地址的变量的值,p变量存放i的地址

     t=*p;  //将a的值给t  *p=*q; //b的值给a*q=t;  //a的值给b

这里的*p相当于a
转化一下变为:只是传递地址

t=a;
a=b;
b=t;


 
常见错误

#include<stdio.h>void swap(int*,int*);int main(){int a=2;int b=5;swap(&a,&b);printf("a=%d,b=%d\n",a,b);return 0;
}void swap(int *p,int *q){int *r;r=p;p=q;q=r;return;
}

运行结果未发生交换

例如:

r=p;   //p的内容给r
p=q;
q=r;

只是交换了指向

原来的q指向b,p指向a;
现在的q指向a,p指向b;

但是a和b的内容仍然没有改变,只是交换了指向

综上所述:要想通过函数改变这个变量的值,必须传入这个变量的地址,然后使用指针进行交换

指针 —— C语言的灵魂,你会了吗相关推荐

  1. 指针是c语言的灵魂,C语言之灵魂 指针学习

    指针是c语言的难点 称之为c语言的灵魂一点也不为过,不过指针用好了能事半功倍,用不好bug满天飞. 一.指针的概念 指针也是变量只不过是特殊的变量,指针的值是另一个变量的地(也就是变量所在的内存地址) ...

  2. c语言指针转换成数组,浅议C语言中灵魂数组和指针的互操作(转)

    浅议C语言中灵魂数组和指针的互操作(转)[@more@]曾听好多朋友说,C是一种怀旧的语言,因为它的历史很久远,然而自从各种面向对象的编程语言的相续出现让它的影响力日减. 当然了,这是无可非议的,但是 ...

  3. 抓住指针的精髓,才算掌握了 C 语言的灵魂!

    作者 | 五道杠的小屁孩wwk 责编 | 夕颜 出品 | CSDN博客 学习C肯定会碰到指针,指针是C的灵魂.所以学好指针很关键,这里写一些指针方面的容易错的或者易混淆的知识点还有自己不会的盲点,以便 ...

  4. C语言 const 修饰指针 - C语言零基础入门教程

    目录 一.const 简介 二.const 修饰指针 1.const int *p 2.int const *p 3.int * const p 4.const int * const p 三.猜你喜 ...

  5. c语言有三级指针,C语言 三级指针的应用

    //三级指针的使用 #define _CRT_SECURE_NO_WARNINGS #include #include #include //三级指针做输出 int getmun(char ***po ...

  6. pascal指针 c语言指针,Pascal中的指针运算指南(与C比较).doc

    Pascal中的指针运算指南(与C比较) Pascal中的指针运算指南(与C比较) Pascal中的指针运算指南(与C比较) 大家都认为,c语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用 ...

  7. c语言定义node类型指针,C语言指针的概念

    在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问 ...

  8. 指针——C语言之魂(1)

    根据自己的学习进度,本篇博客将会对C语言的灵魂部分--指针做一个初级的描述,以及一些基本细节的讲解.欢迎阅读指正. 指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points ...

  9. C语言 函数指针 - C语言零基础入门教程

    目录 一.函数指针简介 1.常规函数声明 2.函数指针声明 二.函数指针实战 三.猜你喜欢 零基础 Python 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.函数指 ...

最新文章

  1. arcgis弧段怎么加很多点_ArcGIS小技巧——提取面要素的质心点
  2. linux驱动内核,Linux内核设备驱动之Linux内核基础笔记整理
  3. (转)一个vue路由参数传递的注意点
  4. UnityShader入门精要-3.3 UnityShader的结构
  5. EOS智能合约授权限制和数据存储
  6. C# GDI+ 绘图
  7. 获取/设置IFRAME内对象元素的几种JS方法
  8. 图像频域增强:陷波滤波器
  9. Linux:GCC安装与编译(详细)
  10. OpenCV之图像二值化与去噪
  11. Android性能优化(第一章)
  12. 员工请假系统 php,员工请假管理系统(源代码+论文)
  13. mysql数据库设计与优化与架构 模拟场景(京东商城)
  14. pc版Web聊天界面+代码分享(HTML+CSS)
  15. 【matlab】利用matlab解二元一次方程
  16. 那些让人“口吐芬芳”的APP登录骚操作?!!
  17. 计算机硬盘copy,diskgenius硬盘拷贝的方法
  18. c语言delay和while,c语言中delay的用法
  19. 【Android】google plus、Facebook登陆sdk集成打包出aar的使用步骤
  20. 嵌入式工程师修炼:自信 坚强 积极 勤快

热门文章

  1. 一张图学会python3高清图-一张图理清 Python3 所有知识点
  2. python教程视频下载-python怎么下载视频
  3. python开发软件的实例-如何编写Python软件开发文档(7个技巧)
  4. python工资高还是java-Python工资高还是Java工资高?Python和Java学哪个?
  5. GMM-HMM语音识别原理详解 - 全文
  6. 印地语自由对话语音识别数据库-200人
  7. 第M题 快速幂详解!: 给出3个正整数A B C,求A^B Mod C。
  8. 51—Nod 1384 全排列
  9. windows安装vnm
  10. 节点操作大全(二)~操作节点的属性