zoukankan      html  css  js  c++  java
  • C语言中的指针与数组的定义与使用

    指针的特点

    • 他就是内存中的一个地址
    • 指针本身运算
    • 指针所指向的内容是可以操作的

    操作系统是如何管理内存的

    栈空间

    • 4M~8m的大小
    • 当进入函数的时候会进行压栈数据

    堆空间

    • 4g的大小 1g是操作系统
    • 全局变量

    内存映射

    • 可以对内存的内容修改修改硬盘的内容
    • 一般在数据库中经常使用

    内存的分配与释放

    • c语言分配内存的方法

      //  malloc(需要分配的大小); 这里的分配的大小需要对齐的2的指数
      void *mem = malloc(size);
      
    • 释放内存

      // 一般分配的内容都是在堆空间中的
      // 如果使用完不去释放会照成内存泄漏和野指针的出现
      free(men);
      
    • 什么是内存泄漏:

      • 不断的向系统申请内存
      • 申请的内存不用,也不去释放
      • 绝对不允许内存泄漏
    • 什么是野指针

      • 这个指针已经被释放掉了
      • 别人又创建了这个指针
      • 过去的自己又用到了这个指针

    函数指针

    返回值类型(*指针变量名)(参数列表);

    int func(int x); // 声明一个函数
    int (*f)(int x); // 声明一个函数指针
    f = func; // 将func函数的首地址赋值给指针f
    
    #include <stdio.h>
    
    int sum (int a, int b)
    {
    	return (a+b);
    }
    
    int main(int argc, int *argv[])
    {
    	// 定义一个函数指针 
    	int (*f) (int, int);
    	// f 指向 sum函数
    	f = sum;
    	// 执行f函数,相当于执行sum函数
      int f_sum = f(2,3);
    	printf("f_sum: %d
    ", f_sum);
      
      return 0;
    }
    

    指针就是内存地址: void*、 char*

    数组就是:char c[2]、 int arr[10],指连续相同类型的空间

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        // 定义两个int类型的指针
        int *a, *b;
        // 通过malloc在堆里面开辟了空间
        a = (int*)malloc(sizeof(int));
        b = (int*)malloc(sizeof(int));
        *a = 1;
        *b = 2;
        // 指针a的地址是&a, a是指向空间的地址,*a是指向空间的值
        printf("addr of a:%p, %p, %d
    ", &a, a, *a);
        printf("addr of b:%p, %p, %d
    ", &b, b, *b);
        return 0;
    }
    
    

    #include<stdio.h>
    #include<stdlib.h>
    
    int main(int argc, char *argv[])
    {
        // 创建一个数组c里面有3个数据,int类型的数组一个数组占4个字节,地址相关的空间相差是1个字节
        int c[3] = {1,2,3};
        printf("c的地址:%p	%p	c[0]:%p	c[1]:%p	c[2]:%p	
    ",c, &c,  &c[0], &c[1], &c[2]);
        printf("%d, %d, %d
    ", c[0], c[1], c[2]);
    }
    
    
  • 相关阅读:
    Checking Types Against the Real World in TypeScript
    nexus pip proxy config
    go.rice 强大灵活的golang 静态资源嵌入包
    几个golang 静态资源嵌入包
    rpm 子包创建学习
    Rpm Creating Subpackages
    ava 类似jest snapshot 功能试用
    ava js 测试框架基本试用
    The Architectural Principles Behind Vrbo’s GraphQL Implementation
    graphql-compose graphql schema 生成工具集
  • 原文地址:https://www.cnblogs.com/fandx/p/12122863.html
Copyright © 2011-2022 走看看