• 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;
     } 

  • 相关阅读:
    从客户端(Content="<p>666</p>")中检测到有潜在危险的 Request.Form 值。
    VS插件集
    Carmack在QUAKE3中使用的计算平方根的函数
    自动匹配HTTP请求中对应实体参数名的数据(性能不是最优)
    webapi单元测试时出现的ConfigurationManager.ConnectionStrings为空错误
    @@IDENTITY在加触发器时返回错误的ID值
    Protobuf完整实例
    Apache配置多个监听端口和不同的网站目录的简单方法[转]
    ThinkPHP 小技巧
    复选框 ajax取得后台页面
  • 原文地址:https://www.cnblogs.com/nyist0/p/9113095.html
Copyright © 2020-2023  润新知