zoukankan      html  css  js  c++  java
  • 2.2.3指针

    指针是C语言中非常重要的概念,也是C语言的特色之一。

    定义指针变量的一般形式为:

        类型名  *指针变量名

    例如,下列语句定义了指向float类型的指针变量p。

        float  *p;

    指针用于存放变量的地址。

    指针被定义后,必须将指针和一个特定的变量进行关联后,才可以使用指针,也就是说,指针变量要先赋值才能使用,当然指针变量被赋的值应该是地址。

    指针的基本运算

    指针可以同整数进行加减操作,例如,如果变量p是指向float类型变量的指针,那么表达式p+i代表了从p这个位置开始的第i个float类型变量的地址。

    #include<stdio.h>
    void Print(int *a)
    {
        for(int i=0;i<10;i++)
            printf("%d ",a[i]);
        printf("
    ");
    }
    int main()
    {
        int a[10]={1,2,3,4,5,6,7,8,9,0};
        Print(a);
        int *c=a;//a是数组a的地址 
        printf("%d
    ",*c);
        printf("%d
    ",*c+1);//+1
        printf("%d
    ",*c+2);//+2 
        return 0;
     } 

    指针与数组

    1.在C语言中,数组名本身就是数组的基地址,即第1个元素(下标为0)的地址。

    2.在函数定义中,被声明为数组的形参实际上是一个指针。当传递数组时,按值调用传递它的基地址,数组元素 本身不被复制。

    3.数组名作为函数的实参,在被调用函数中,就能访问实参数组所在的存储单元,不但可以引用,还能改变这些单元的内容。返回主调函数后,相应数组元素的值就改变了。

    #include<stdio.h>
    void Print(int *a)
    {
        for(int i=0;i<10;i++)
            printf("%d ",a[i]);
    }
    int main()
    {
        int a[10]={1,2,3,4,5,6,7,8,9,0};
        Print(a);
        return 0;
     } 

    用指针实现内存动态分配

     在动态存储方面C语言提供了一组标准函数,定义在<stdlib.h>里面,主要有:

    1.动态存储分配函数void *malloc(size):在内存的动态存储区分配一连续空间其长度为size。

    若申请成功,则返回一个指向所分配内存空间的起始地址;若申请内存空间不成功,则返回NULL(值为0)。

    该函数的返回值为(void *)类型,在具体使用中,需要将malloc的返回值转换到特定指针类型,并赋给一个指针变量。

    2.动态存储释放函数void free(void *ptr):释放由动态分配函数申请到的整块内存空间,ptr为指向要释放空间的首地址。

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        int *p=(int *)malloc(sizeof(int));
        printf("%d
    ",p);//地址 
        scanf("%d",p);//向p指向的内存中写入数据 
        printf("%d",*p);//使用间接访问运算符*访问p中的数据 
        free(p);//释放 
        return 0;
     } 

  • 相关阅读:
    Linux基础命令-cd
    grep和egrep正则表达式
    SpringMVC源码阅读-一个请求主要处理流程DispatcherServlet(四)
    SpringMVC源码阅读-dispatcher组件初始化过程(三)
    SpringMVC源码阅读-Servlet WebApplicationContext初始化(二)
    SpringMVC源码阅读-Root WebApplicationContext初始化(一)
    logback源码阅读-配置文件解析过程(六)
    logback源码阅读-Encoder(五)
    logback源码阅读-Appender(四)
    logback源码阅读-Logger日志生成(三)
  • 原文地址:https://www.cnblogs.com/nyist0/p/9113095.html
Copyright © 2011-2022 走看看