指针学习笔记(二)

指针学习笔记(二)

程序栈

  程序栈是支持函数执行的内存区域,通常和堆共享。程序栈通常占据这块区域的下部,二堆则是用上部。

栈帧

  程序栈存放栈帧,栈帧存放函数的参数和局部变量。堆管理动态内存。

  栈帧由一下元素组成:

  • 返回地址

  函数完成后要返回的程序内部地址

  • 局部数据存储

  为局部变量分配的内存

  • 参数存储

  为函数参数分配的内存

  • 栈指针和基指针

  运行时系统用来管理栈的指针
  栈指针通常指向栈顶部,帧指针通常存在并指向栈帧内部的地址。

函数指针

  函数指针是持有函数地址的指针。

   void(*foo)();  //void为返回类型;foo为函数指针变量的名字;()存放参数。

  传递函数指针:把函数指针声明作为函数参数

  返回函数指针:把函数返回的类型声明为函数指针

  数指针数组:把函数指针声明为数组类型,函数指针数组可以基于默写条件选择要执行的函数

  比较函数指针:用相等和不等操作比较函数指针

NULL与NUL

  NULL用来表示特殊指针,通常定义为((void*)0)

  NUL是一个char,定义为\0

字符串字面量池

  字面量*:用双引号引起来的字符序列,常用来进行初始化,位于字符串字面量池中

  定义字面量时通常会将其分配在字面量池中,这个内存区域保存了组成字符串的字符序列,一般字面量分配在只读内存中是不可变的。字符串字面量不存在作用域的概念。

字符串内存分配

char *globalheader = "Chapter";
char globalArrayHeader[] = "Chapter";

void displayHeader()
{
    
    
    static char* staticHeader = "Chepter";
    char *localHeader = "Chapter";
    static char staticArrayheader[] = "Chepter";
    char localArrayHeader[] = "Chepter";
    char *heapHeader = (char*)malloc(strlen("Chepter")+1);
	strcpy(heapHeader,"Chapter");
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/I_m_Gagaga/article/details/127659499