zoukankan      html  css  js  c++  java
  • C语言——初见指针

     

    • 指针

      指针是存放变量地址的变量。  

    由此我们可以知道了,指针存放的是变量地址且只能应用于内存中对象,指针本身也是一个变量。但是指针不仅仅可以存储变量地址,还可以是其他例如函数指针。

    C语言程序运行时,内存主要分为这几个部分

    1. 只读存储区———存储程序本身的机器码和常量
    2. 静态存储区————全局变量和静态变量
    3. 动态存储区————堆和栈

    好像和要说的指针关系不是很大。

    • 指针声明

      指针使用 [类型关键字] [变量名]  这样的方式进行定义。eg:int *a;定义了一个指针,指针名叫a,可以存储任意int型变量的地址。类型关键字是指针所指内存存储的数据类型。

      现在来认识两个一元操作符& *,&是取地址运算符,作用是返回变量的地址。*是简介寻址运算符,返回操作数指定地址的值。在我用的c语言程序设计教材里面并没有详细介绍这两个操作符。

      认识了这两个操作符,现在我们可以来进行一些操作了,如下代码;

        

    int a,c;     //定义变量a,c
    int *b;      //定义指针b
    a = 1;        //现在a=1
    b = &a;    //b指向a
    c=*b;    //c现在等于1
    *b = 5;    //a现在等于5
    b = & c;    //b现在指向c
    *b = 0;   // c现在等于0
    #include <stdio.h>
    #include <stdlib.h>
    
    
    main()
    {
        int *p=NULL,q=1;
        p = &q;
         printf("Address:%p
    ",&q);
        printf("Address:%d
    ",q);
        printf("Address:%p
    ",p);
        printf("Address:%d
    ",p);
        printf("Address:%p
    ",*p);
        printf("Address:%d
    ",*p);
    
    }
    运行结果如下:
    
    Address:0060FEF8
    Address:1
    Address:0060FEF8
    Address:6356728
    Address:00000001
    Address:1

    由于指针直接对内存操作,所以,要清楚每一个指针指向何处,进行什么操作。空指针是危险的,所以当指针没有指向任何地方,需要使用标准库提供的NULL进行初始化。

    指针可以用void 声明,我之前想用void的指针printf一个变量,但是编译器报错了。网上说void 不指定类型的指针可以指向任何累心的地址,我在coudblocks测试是可以,但是输出报错,如果用另一个指定类型的指针再指向这个void的指针,就可以不报错输出。我对于这个void有点迷,看不懂。

    找了半天,这个类型转换我还有点懵,啥也不写了,先写这么多吧。

  • 相关阅读:
    Codevs 2296 仪仗队 2008年省队选拔赛山东
    Codevs 1535 封锁阳光大学
    Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
    Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
    Codevs 1684 垃圾陷阱
    洛谷 P1108 低价购买
    Vijos P1325桐桐的糖果计划
    Codevs 3289 花匠 2013年NOIP全国联赛提高组
    Codevs 2611 观光旅游(floyed最小环)
    C语言基础之彩色版C语言(内含linux)
  • 原文地址:https://www.cnblogs.com/dosu/p/11931175.html
Copyright © 2011-2022 走看看