zoukankan      html  css  js  c++  java
  • C语言之指针

    题记:因为想系统学一下数据结构,故先复习C语言的指针。


    一、指针的作用

    1、表示一些复杂的数据结构;

    2、能直接访问硬件;

    3、快速的传递数据,减少了内存的损耗;

    4、能使函数返回一个以上的值;

    5、能够方便的处理字符串。


    二、指针的定义

    1、指针就是地址,地址就是指针;
    2、指针变量就是存放内存单元编号的变量,或者说指针变量就是存放地址的变量;
    3、指针和指针变量是两个不同的概念。通常我们叙述是会把指针变量简称为指针,实际上他们的含义并不一样。


    三、指针的常见错误

    # include <stdio.h>
    
    int main(void)
    {
    	int * p;
    	static int i = 5;
    
    	*p = i;     //错误,因为P中的值是一个垃圾值,使P指向了一个系统并未分配的值,不能访问通过*p访问该地址的值
    	printf("%d
    ", *p);
    
    	return 0;
    }

    四、使函数返回一个以上的值

    看一个简单的例子,调用函数来交换两个变量的值:

    /*
    	2016年8月31日21:28:47
    	交换两个变量的数值
    */
    #include <stdio.h>
    
    void change(int * x, int * y);
    
    int main(void)
    {
    	int x = 1;
    	int y = 2;
    	change(&x, &y);
    	printf("x = %d  y = %d
    ",x, y);  //运行结果:x = 2  y = 1
    
    	return 0;
    }
    
    void change(int * x, int * y)
    {
    	int t;
    	t = *x;
    	*x = *y;
    	*y = t;
    
    	return;
    }
    如果调用函数利用return只能得到一个返回值,而使用指针变量做形参则可以返回多个变量的值。

    注意下面两个程序不能完成交换两个变量的值的功能:

    #include <stdio.h>
    
    void change(int x, int y);
    
    int main(void)
    {
    	int x = 1;
    	int y = 2;
    	change(x, y);
    	printf("x = %d  y = %d
    ",x, y);
    
    	return 0;
    }
    
    void change(int x, int y)  //不能完成互换功能,只是局部变量的值交换了,不会影响全局变量的值
    {
    	int t;
    
    	t = x;
    	x = y;
    	y = t;
    
    	return;
    }


    #include <stdio.h>
    
    void change(int * x, int * y);
    
    int main(void)
    {
    	int x = 1;
    	int y = 2;
    	change(&x, &y);
    	printf("x = %d  y = %d
    ",x, y);
    
    	return 0;
    }
    
    void change(int * p, int * q)  //不能完成互换功能,只是交换了p和q的地址,不会改变x和y的值
    {
    	int * t;
    
    	t = p;
    	p = q;
    	q = t;
    
    	return;
    }



  • 相关阅读:
    QT解析和组装json
    linux下磁盘存储空间不足
    linux下的QT打包方法
    linux下编译protobuf
    linux下编译opencv
    linux下的qt串口通信
    QT执行shell脚本及linux指令相关
    windows下QT打包
    启动zookeeper却没有进程
    Linux命令
  • 原文地址:https://www.cnblogs.com/yzy-blogs/p/6597337.html
Copyright © 2011-2022 走看看