The content of this article is to introduce dynamic memory allocation and namespace in C. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
● Use the new
keyword to apply for dynamic memory
●●Dynamic memory application in C is based on type
●delete
The key is used for memory release
C language actually does not support dynamic memory allocation , is implemented through the malloc
library function. There may be some hardware that does not support malloc
at all; and C new
is a keyword, regardless of whether it is used in any compiler On any hardware platform, dynamic memory allocation is possible. This is the essential difference.
malloc
is based on bytes for dynamic memory allocation, new
is based on type for dynamic memory allocation
// 变量申请: Type * pointer = new Type; // 从堆空间获取一个新的Type类型的空间 // 使用和C语言一样 delete pointer; // 这里指的是pointer所指向的那个元素的内存空间被释放 // 数组申请: Type * pointer = new Type[N]; // N指数组大小,数组元素个数,并非字节数 // delete[] pointer; // 数组的释放,需要在delete后面加[],和变量有区别 // delete[] 说明所要释放的指针是指向一片数组空间的,释放整个数组空间,如果用delete的话,pointer指向的是数组的首元素地址,释放的就是首元素的内存空间,其余元素的内存空间并没有释放,会造成内存泄漏
#include <stdio.h> int main() { int* p = new int; *p = 5; *p = *p + 10; printf("p = %p\n", p); printf("*p = %d\n", *p); delete p; // 指释放单个变量 p = new int[10]; // p指向一片数组空间, // p所指向的内存空间,至少占用了40个字节,保证够用,可能分配得更多 for(int i=0; i<10; i++) { p[i] = i + 1; printf("p[%d] = %d\n", i, p[i]); } delete[] p; // 释放数组 return 0; }
The difference between the new
keyword and the malloc
function:
● new
The keyword is part of C
●malloc
is a function provided by the C library
●new
Allocates memory in units of specific types
●malloc
Memory allocation in bytes
● new
Can be initialized when applying for a single type variable
● malloc
Does not have memory Characteristics of initialization
new
Keyword initialization:
int* pi = new int(1); float* pf = new float(2.0f); char* pc = new char('c')l
In C language There is only one global scope in
●All global identifiers in C language share the same scope
● There may be conflicts between identifiers
Naming was proposed in C The concept of space
● Namespace divides the global scope into different parts
● Identifiers in different namespaces can have the same name without conflict
● Namespace Can be nested in each other
●The global scope is also called the default namespace
Definition:
namespace Name { namespace Internal { /* ... */ } /* ... */ }
Use of namespace
using namespace name; // 使用整个命名空间 using name::variable; // 使用命名空间中的变量 ::variable; // 使用默认命名空间中的变量
#include <stdio.h> namespace First { int i = 0; } namespace Second { int i = 1; namespace Internal { struct P { int x; int y; }; } } int main() { using namespace First; using Second::Internal::P; printf("First::i = %d\n", i); printf("Second::i = %d\n", Second::i); P p = {2, 3}; printf("p.x = %d\n", p.x); printf("p.y = %d\n", p.y); return 0; }
The namespace solves the global problem Problems with variable naming conflicts
C has built-in special keywords for dynamic memory allocation
Dynamic in C Memory allocation can be initialized at the same time
Dynamic memory allocation in C is based on type
The namespace concept in C is used to solve the name conflict problem
Related Recommended video tutorial: "C Tutorial"
The above is the entire content of this article, I hope it will be helpful to everyone's learning. For more exciting content, you can pay attention to the relevant tutorial columns of the PHP Chinese website! ! !
The above is the detailed content of Introduction to dynamic memory allocation and namespace in C++. For more information, please follow other related articles on the PHP Chinese website!