4、计算内存容量
用运算符sizeof可以计算出数组的容量(字节数)。如下实例(a)中,sizeof(a)的值是12(注意别忘了空字符'\0'),指针p指向a,但是 sizeof(p)的值却是4,这是因为sizeof(p)得
到的是一个指针变量的字节数,相当于sizeof(char*),而不是p所指的内存容量,C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它
注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。如下实例(b)中,不论数组a的容量是多少,sizeof(a)始终等于sizeof(char *)
实例(a)计算数组和指针的内存容量
char a[] = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12字节
cout<< sizeof(p) << endl; // 4字节
实例(b) 数组退化为指针
void Func(char a[100])
{
cout<< sizeof(a) << endl; // 4字节而不是100字节
}
5、指针参数如何传递内存的(使用指针的指针),思考:动态给指针开辟内存(函数返回值;指针的指针两种方式)
6、杜绝"野指针"
"野指针"不是NULL指针,是指向"垃圾"内存的指针,人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用,“野指针”的成因
主要有两种:
(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置
为NULL,要么让它指向合法的内存。例如
char *p = NULL;或char *p = 0;
char *str = (char *) malloc(100);
(2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。
(3)指针操作超越了变量的作用范围。这种情况让人防不胜防
分享到:
相关推荐
C#中堆和栈的区别分析 C# 中堆和栈的区别分析是理解 .NET 框架中内存管理的关键。堆和栈是两个基本元素,组成我们 C# 程序的运行环境。在这个知识点中,我们将详细介绍堆和栈的概念、类型变量、分配机制、生命周期...
### 堆和栈的详细分析 #### 一、引言 在计算机科学与软件工程领域,堆(heap)和栈(stack)是两种极为重要的内存管理机制。这两种内存分配方式各自具有独特的特点和用途,对于理解程序运行时内存管理至关重要。 #...
### 堆和栈总结 #### 一、堆栈概念概览 在计算机科学中,堆和栈是非常重要的数据结构,它们在程序运行时管理内存的分配和使用方面发挥着核心作用。对于Java语言而言,堆和栈的概念尤为重要,因为JVM如何管理和使用...
### Java中的堆和栈 #### 一、概述 在Java编程语言中,内存管理是非常重要的一个概念。Java程序运行时的内存主要分为两大区域:**堆内存**和**栈内存**。这两种内存区域有着各自独特的用途和管理机制,对理解和...
#### 三、堆和栈的理论知识 **3.1 申请方式** - **栈**:由系统自动分配。例如,在函数中声明一个局部变量 `int b;`,系统自动在栈中为 `b` 开辟空间。 - **堆**:需要程序员显式申请,并指定大小。在 C 语言中...
### 堆与栈的深度解析 在编程领域,尤其是对于C/C++程序员...堆和栈在内存管理中各司其职,理解它们的区别有助于我们编写更高效、更安全的代码。正确使用堆和栈,避免不必要的内存泄漏和溢出,是每位程序员的基本功。
### 堆和栈的区别详解 #### 一、引言 在编程中,了解不同内存区域的特点及其使用方法是非常重要的。本文将详细解释堆和栈这两种常见内存区域的区别,包括它们的基本概念、特点以及应用场景。 #### 二、基础知识:...
### 详解Java堆和栈 #### 一、引言 在Java编程中,理解堆(Heap)和栈(Stack)的概念及其区别对于程序员来说至关重要。本文将深入剖析这两个概念,并探讨它们之间的差异以及如何影响程序的运行。 #### 二、Java...
### 堆和栈的深度解析 #### 一、程序的内存分配机制 在深入了解堆和栈之前,我们首先需要掌握程序在运行时如何管理内存。一个由C/C++编译的程序通常会划分出几个不同的内存区域: 1. **栈区**:此区域由编译器...
#### 三、堆和栈的应用场景 - **栈**适用于生命周期短、大小固定的对象,如函数内部的临时变量。 - **堆**适合生命周期长、大小不确定的对象,如动态数组、复杂数据结构的实例化。 #### 四、案例分析 考虑以下...
在计算机领域,堆栈是一个不容忽视的概念,我们编写的...C语言程序经过编译连接后形成编译、连接后形成的二进制映像文件由栈,堆,数据段(由三部分部分组成:只读数据段,已经初始化读写数据段,未初始化数据段即BBS)
三、堆和栈的理论知识 2.1 申请方式 * 栈:由系统自动分配。例如,声明在函数中一个局部变量 int b; 系统自动在栈中为 b 开辟空间。 * 堆:需要程序员自己申请,并指明大小,在 C 中使用 malloc 函数,在 C++ 中...
首先,我们要明白栈和堆的主要区别。栈是一种后进先出(LIFO,Last In First Out)的数据结构,它主要用于存储临时变量、函数调用时的参数、返回地址等。每次函数调用都会在栈上创建一个新的上下文,当函数执行完毕...
其中,堆和栈是最为常见的两种内存区域,它们在程序运行时发挥着不同的作用。 1. **栈 (Stack)**:是一种后进先出(LIFO)的数据结构,主要由编译器自动分配和释放。当函数调用时,系统会在栈上为局部变量分配空间...
#### 三、堆和栈的理论知识 **2.1 申请方式** - **栈(stack)**:由系统自动分配,如声明在函数中的局部变量 `int b;` 系统会在栈中为其分配空间。 - **堆(heap)**:需要程序员手动申请并指定大小。在 C 语言中使用...
### Windows堆和栈的区别 在计算机编程领域,堆和栈是两种重要的内存管理方式,它们在数据存储、分配以及管理方面扮演着不同的角色。本文将详细介绍堆和栈的区别,并结合Windows操作系统下的具体实现来深入探讨。 ...