美文网首页程序员
C指针(1):指针和内存

C指针(1):指针和内存

作者: miamendax | 来源:发表于2020-05-26 18:38 被阅读0次

C指针

指针和内存

1.指针的声明

指向未初始化的内存的指针可能会产生问题。如果将这种指针解引,指针的内容可能并不是一个合法的地址,就算是合法地址,那个地址也可能没有包含合法的数据

//声明一个指针
int num;
int *pi;

2.如何阅读声明

3.地址操作符(&)

//地址操作符&返回操作数的地址,可用地址操作符初始化指针
num = 0;
pi = #

4.打印指针的值

//显示pi的地址和内容,pi的内容时num的地址
printf("Address of pi: %d Value: %d\n",&pi, pi);
printf("Address of pi: %x Value: %x\n",&pi, pi);
printf("Address of pi: %o Value: %o\n",&pi, pi);
printf("Address of pi: %p Value: %p\n",&pi, pi)
//输出,%x表示十六进制,%o表示八进制,%p将值显示为实现专用的格式,通常是十六进制数
Address of pi: 4520824  Value: 4520836
Address of pi: 44fb78  Value: 44fb84
Address of pi: 21175570  Value: 21175604
Address of pi: 0044FB78  Value: 0044FB84
//在不同的平台上用一致的方式显示指针的值比较困难,一种方法:把指针转换为void指针,然后用%p格式说明符来显示
printf("Value of pi: %p\n", (void*)pi);

5.内存使用方式

6.间接引用操作符(*)解引指针

//*返回指针变量指向的值,称解引指针
nt num = 5;
int *pi = &num
printf("%p\n",*pi); // 显示为5

7.null

  • null概念: 指指针包含了一个特殊的值,和别的指针不一样,它没有指向任何内存区域。两个null指针总是相等的

  • NULL宏: 是强制类型转换为void指针的整数常量0, 通常理解为null指针, 定义在多种头文件中, 包括stddef.h、stdblib.h和stdio.h

    #define NULL ((void*)0)
    
  • ASCII字符NUL: 全0的字节

  • null字符串; 是空字符串,不包含任何字符

8.void指针

void指针是通用指针,用来存放任何数据类型的引用

void *pv
//void指针具有与char指针相同的形式和内存对齐方式
//void指针和别的指针永远不会相等,不过,两个赋值为NULL的void指针是相等的
//任何指针都可以被赋给void指针,它可以被转换回原来的指针类型,这样的话指针的值和原指针的值是相等

9.全局和静态指针

int *globalpi;//全局指针
void foo() 
{    static int *staticpi;//静态指针    
 ...
}
int main()
{    
    ...
}

栈帧被推入栈中,堆用来动态分配内存,与栈和堆所处的数据段不同的数据段存放全局/静态变量

相关文章

  • C指针(1):指针和内存

    C指针 指针和内存 1.指针的声明 指向未初始化的内存的指针可能会产生问题。如果将这种指针解引,指针的内容可能并不...

  • 2.7-C语言入门-指针

    1.指针的含义-变量的地址 a.指针:C语言中用“指针”来表示内存地址(即:指针指向了内存地址),即“指针”可理解...

  • 链表代码注意事项

    1、理解指针或引用的含义 比如C语言是指针,就是相当于JAVA的引用 2、警惕指针丢失和内存泄漏 C 语言,内存管...

  • C++笔记

    C在《C和指针》这本书里有介绍,int *p1=new int[10];该语句给指针p1分配内存,没有对指针初始化...

  • 慕课网-Linux C语言指针与内存-学习笔记

    Linux C语言指针与内存 工具与原理 指针 数组 字符串 堆内存与栈内存 gdb内存调试工具。 C语言中指针的...

  • NDK启航篇——C语言基础(内存分配)

    指针、指针类型、空指针、指针运算、函数指针都介绍过了,下面来写一下内存分配 C中的内存主要分为 栈区(stack)...

  • [Swift Tips 读书笔记]从 Objective-C 到

    UnsafePointer C 指针内存管理 COpaquePointer 和 C convention GCD ...

  • C++11(1)-智能指针

    C++裸指针的内存问题有:1、空悬指针/野指针2、重复释放3、内存泄漏4、不配对的申请与释放 使用智能指针可以有效...

  • 疯狂的c指针

    前言 本期简要介绍指针、指针操作符以及指针如何与内存相互作用。 1.1 指针和内存 C程序在编译后,会以以下三种形...

  • Swift中的内存管理

    1、内存管理,weak和unowned2、@autoreleasepool3、C 指针内存管理 1、内存管理,we...

网友评论

    本文标题:C指针(1):指针和内存

    本文链接:https://www.haomeiwen.com/subject/qoroohtx.html