c++指针的用法
C++中的指针是一种特殊的变量,其存储的是另一个变量的地址。通过指针可以直接访问该地址所对应的变量,从而操作它的值。以下是C++中指针的十大常见用法。
AI让生活更美好
分享学习C/C++编程、机器人、人工智能等领域知识。
103篇原创内容
1
动态内存分配
动态内存分配是指在程序运行时,根据需要动态地分配内存空间。这种分配是在堆上进行的,与静态内存分配(在编译期间就分配好内存)不同。
在C语言中,动态内存分配主要通过malloc()函数和free()函数实现。malloc()函数用于申请一定大小的内存空间,并返回一个指向该空间的指针;free()函数则用于释放已经申请的内存空间,避免内存泄漏。
在C++语言中的动态内存分配是通过new和delete关键字实现的。动态内存是在程序运行时根据需要分配或释放的内存,相对于静态内存,动态内存在空间使用上更加灵活,但也需要小心使用以避免内存泄漏等问题。
动态内存的基本用法如下:
分配内存:使用new关键字申请一块内存,如:
int* p = new int; // 申请一个int类型的内存块
初始化内存:如果需要,可以使用括号进行初始化,如:
int* p = new int(123); // 申请一个int类型的内存块并初始化为123
访问内存:使用指针访问内存,如:
int* p = new int;*p = 456; // 将指向的内存赋值为456std::cout << *p << std::endl; // 输出:456
释放内存:使用delete关键字释放之前申请的内存,如:
int* p = new int;delete p; // 释放内存p = nullptr; // 避免野指针
需要注意的是,在使用完动态内存后,必须及时释放内存,否则会导致内存泄漏的问题。此外,在释放内存后,最好把指针设置为nullptr,以避免成为野指针。
2
传递参数
指针可以作为函数的参数传递地址,这样在函数内部就可以通过指针来修改原始变量的值。在函数定义中,将指针作为参数声明时需要使用星号(*)来表示该参数是一个指针类型,例如:
指针函数的作用void changeValue(int *ptr) { *ptr = 10;}int main() { int num = 5; cout << "num before f
unction call: " << num << endl; // 输出 num 的值为 5 changeValue(&num); // 将 num 的地址传递给函数 cout << "num after function call: " << num << endl; // 输出 num 的值为 10 return 0;}
在上面的代码中,我们定义了一个 changeValue 函数,它的参数是一个 int* 类型的指针。函数内部通过解引用操作符 * 修改了指向的内存空间的值为 10,从而改变了原始变量 num 的值。
在主函数中,我们先输出 num 的初始值为 5,然后调用 changeValue 函数并将 num 的地址作为参数传递进去,最终再次输出 num 的值为 10。
为了避免这种繁琐的用法,其实我们可以使用引用&。
3
数组访问
使用指针可以通过指针算术来访问数组元素,实现更高效的数据结构和算法。指针是一个
变量,它存储了另一个变量的地址。在C/C++语言中,数组名本质上是指向数组第一个元素的指针,因此可以使用指针算术来访问数组元素,而无需使用数组下标。
例如,假设有一个int类型的数组a,要访问第i个元素,可以使用以下代码:
int a[100];int i = 5;int *p = &a[0]; // p指向a的第一个元素int x = *(p + i); // 访问a[i]
这里,我们定义了一个指向a的第一个元素的指针p,并使用指针算术将指针p移动i个位置以访问a[i]。由于指针算术比数组下标运算更快,因此在某些情况下,使用指针可以提高程序的效率。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论