zoukankan      html  css  js  c++  java
  • C-指针和malloc函数

    先说:唯手熟尔

    指针

    1. 指针存储着一个内存空间的地址
    2. 定义一个指针
    int a;
    int * p;
    

    定义一个指针,只需在变量前面加一个 * 号。这里的指针只能存储一个存放整数的内存空间的地址

    1. 指针如何存储地址
    p = &a;
    

    &叫取地址符。这样整形指针p获得了整型变量a的地址。理解为指针p指向了整型变量a

    1. 可以通过指针p来操作变量a。
      例如,输出变量a的值
    int a=10;
    int * p;
    p=&a;
    printf("%d",* p);
    

    这里的 * 号是间接访问运算符。作用是取得指针p所指向的内存中的值。

    1. C语言中 * 号有三个用途
    • 乘号。加减乘除
    • 声明指针变量。在定义指针变量时使用,如:int * p;
    • 取得指针所指向的内存中的值。简介访问运算符。例如printf("%d",* p);

    malloc函数

    1. 在内存中存储整数10
    • int a=10;
    • malloc(4);
    1. 使用malloc函数会从内存中申请分配指定字节大小的内存空间。此处申请的是4个字节。不知道int类型4个字节还可以通过sizeof(int)获取int类型所占字节数。申请好4个字节空间后,就需要用一个指针来指向这个空间。
    int * p;
    p=(int * )malloc(sizeof(int));
    

    需要注意的是,malloc函数返回类型是void * 类型。void * 表示未确定类型的指针。在C语言和C++,可被强制转换为任何其他类型的指针。此处我们将其强制转化为整形指针

    1. 指针存储的是某空间地址,那为什么分不同类型的指针呢?
      是为了让系统知道某空间应该取多少个连续内存作为一个数据。
    2. 例子
      存储整数10的代码如下
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    	int *p;
    	p=(int * )malloc(sizeof(int));
    	* p=10;
    	printf("%d",* p);
    	return 0;
     } 
    
    1. 为什么要用如此复杂的办法存储数据?
      预先的方法我们必须预先准确的知道所需变量的个数,也就是说我们必须定义出所有变量。定义一百个,程序就只能存储一百个。通过malloc函数我们可以在程序运行的过程中根据实际情况来申请空间

    最后:个人觉得指针和malloc函数谁都离不开谁。malloc申请的内存需要指针指示,而指针用来指示一个不确定的空间才发挥了真正作用。

  • 相关阅读:
    我的友情链接
    我的友情链接
    BUMO:超级节点共建接口
    OpenStack 对接 Ceph 环境可以创建卷但不能挂载卷的问题
    零知识证明: 抛砖引玉
    比特币原理
    区块链零知识证明:STARKs,Part-3:攻坚(下)
    什么是zkSNARKs:谜一般的“月亮数学”加密,Part-1
    什么是zkSNARKs:谜一般的“月亮数学”加密,Part-2
    STARKs, Part I: 多项式证明
  • 原文地址:https://www.cnblogs.com/wy0526/p/13227135.html
Copyright © 2011-2022 走看看