C语言内存空间的使用--指针

1,指针概述

1>、分配一个盒子,盒子要多大?

在32bit系统中,指针就4个字节

2>、盒子里存放的地址 所指向 内存的读取方法是什么?

例如int *p, char *p        ps:  指针指向内存空间,一定要保证合法性

2,指针+修饰符

1>const :常量、只读【不能变】

写法:都是一样的,但最后一种更为严格

const char *p;         char const *p;

char * const p;        char *p const;

const char * const p              ROM

2>typedef    :对复杂自定义数据类型起别名

3,指针+运算符

1>++、--、+、-

指针添加写法

    printf("%x",*(p1+1));

    printf("%x",p1[1]);

2>[]

变量名[ n ]   n:ID  标签

地址内容的标签访问方式

取出标签里的内存值

3>逻辑操作符

--------- ==  !=

1)、跟一个特殊值进行比较      0x0 : 地址的无效值,结束标志

if( p == 0x0)

NULL

2)、指针必须是同类型的比较才有意义
    char *

int *

4,多级指针

指向一块地址,地址又分区,一区指向一个地址,地址里面是字符串,连着就成了一个整体

时间: 2024-10-09 22:13:33

C语言内存空间的使用--指针的相关文章

C语言内存空间的使用--数组

1,数组的定义 数组可以理解一块有控件的内存地址,和指针相识,但指针是可变,数组是一个常量符号,指定了那块地址. 1>定义一个空间: 1.大小 2.读取方式 int buf[100];//控件是0~99 2> 数组名是一个常量符号,而指针是个变量,一定不要放到=的左边     char buf[100];     buf = "hello world";   //将会报错 3>数组名[m]  m 的作用域是在申请的时候,当你后面使用的时候,m可大可小,编译器无法识别判

C语言内存空间的使用--内存分布图

内存分布图   内核空间    应用程序不许访问 ------------------------------- 3G   栈空间      局部变量           RW -----------   运行时的堆空间 malloc -----------   全局的数据空间 全局变量(又可以分为:初始化的,未初始化)static RW位置: 初始化data 未初始化和static bss    只读数据段    "hello" 字符串常量    R        const    

C语言内存空间的使用

一.指针 1.1.指针概念 1.2.指针修饰符 数组 结构体 共同体

用calloc分配10块大小为4字节的内存空间,打印指针地址,并且打印出内存中的内容

#include<stdio.h> #include<stdlib.h> #include<string.h> int main(void) { int  i; int *str = NULL; str = (int*)calloc(10, sizeof(int)); if(str==NULL) { printf("calloc error!\n"); return -1; } printf("start addr: %p\n",

使用malloc分别分配2KB的空间,然后用realloc调整为6KB的内存空间,打印指针地址

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> int main(void) { int *str1 = NULL; int *str2 = NULL; str1 = (int*)malloc(2*1024*sizeof(char)); if(str1==NULL) { printf("malloc error!\n"); return

使用malloc分别分配2KB,6KB的内存空间,打印指针地址

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> int main(void) { int *str1 = NULL; int *str2 = NULL; str1 = (int*)malloc(2*1024*sizeof(char)); str2 = (int*)malloc(6*1024*sizeof(char)); if(str1==NULL || st

PostgreSQL 聚合函数共享申请的内存空间

CREATE AGGREGATE Rbitmap_union2 (Rbitmap) ( sfunc = myfunction, stype = mytype, FINALFUNC = myfunction_final ); 在编写聚合函数时,对每一行都会重复调用指定同一函数,如果要处理的数据是累加的,那么如果不在每次调用之间共享内存空间,而是不停的申请释放新的内存,那么速度会变得很慢,所以在这时共享内存是十分有用的: PostgreSQL 有 MemoryContext 的概念,如果普通的使用

C语言指针及占据内存空间

第一.了解内存空间 本文章文字有点多,会有点枯燥,配合图文一起看可以缓解枯燥,耐心阅读哦!!! 先了解内存地址,才更好的理解指针! 我们可以把内存想象为成一列很长很长的货运火车,有很多大小相同的车厢,而每个车厢正好相当于在内存中表示一个字节.这些车厢装着不同的货物,就像我们的内存要存着各式各样的数据. 多啰嗦一下 我们平时在电脑上能够听音乐.看视频和文章,其实看到的这些东西就是内存中每个“车厢”里面的数据,这些数据最终还是由二进制0/1演变而成. 虽然视频.文章.音乐等这些信息在我们眼里是不同的

C语言-第32课 - 野指针和内存操作分析

第32课 - 野指针和内存操作分析 一.概念 初识野指针 l 野指针通常是因为指针变量中保存的值不是一个合法的内存地址而造成的. l 野指针不是NULL指针,是指向不可用内存的指针. l NULL指针不容易用错,因为if语句很好判断一个指针是不是NULL. l C语言中没有任何手段可以判断一个指针是否为野指针. 野指针的由来 (1)局部指针变量没有被初始化. 例: #include <stdio.h> #include <string.h> struct Student { cha