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有点迷,看不懂。

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

  • 相关阅读:
    课程的正确步调——Leo鉴书74
    poj(1011)——Sticks(经典的dfs+剪枝)
    怎样去除JSP页面提示:Cannot return from outside a function or method.
    SharePoint 2013 中代码创建列表查阅项字段
    王立平--GUI与GUILayout的差别
    zoj How Many Shortest Path
    QVector的内存分配策略
    java中基于TaskEngine类封装实现定时任务
    超越竞争对手的秘密武器-技术重用
    redis-2.6.16源码分析之pub-sub系统
  • 原文地址:https://www.cnblogs.com/dosu/p/11931175.html
Copyright © 2011-2022 走看看