在本例中使用指针的好处
Benefits of using pointer in this example?
本文关键字:指针 更新时间:2023-10-16
我从c++开始,真的没有看到指针的优势。我看到很多人说指针有助于节省内存或在内存管理方面很好。
像下面的例子一样,它们返回相同的结果,如果我在这种情况下使用指针有什么不同?没有指针typedef struct
{
int book_id;
} Books;
void printbookinf( Books book );
int main( )
{
Books bno1;
Books bno2;
bno1.book_id = 1225;
bno2.book_id = 3214;
printbookinf( bno1 );
printbookinf( bno2 );
return 0;
}
void printbookinf( Books book )
{
printf("abc %d",book.book_id);
}
与指针typedef struct
{
int book_id;
} Books;
void printbookinf( Books *book );
int main( )
{
Books bno1;
Books bno2;
bno1.book_id = 1225;
bno2.book_id = 3214;
printbookinf( &bno1 );
printbookinf( &bno2 );
return 0;
}
void printbookinf( Books *book )
{
printf("abc %d",book->book_id);
}
或
typedef struct
{
int book_id;
} Books;
void printbookinf( Books *book );
int main( )
{
Books *bno1;
Books *bno2;
bno1->book_id = 1225;
bno2->book_id = 3214;
printbookinf( bno1 );
printbookinf( bno2 );
return 0;
}
void printbookinf( Books *book )
{
printf("abc %d",book->book_id);
}
我看到很多人说指针有助于节省内存或在内存管理方面很好。
一般来说,这不是指针的作用。在您的示例中,如果struct
比指针大,指针将帮助您节省内存和传输数据。
第一个示例在传递参数时复制struct
。这意味着两件事:
- 将复制整个结构,即使是一个大结构,并将副本传递给函数
- 函数内部的任何修改对调用者都是不可见的。
- 只有指针被复制,
- 如果有任何更改,则对传递给函数的原始参数执行。
你的第三个例子有未定义的行为,因为你传递的指针是未赋值的。
注意:你的问题没有询问引用,但是有一个与指针密切相关的结构,可以让你节省参数复制的空间,并且它允许函数对原始值进行修改。所有这些都是在保持访问成员的点.
语法的同时发生的,就好像它是struct
,而不是指针。
如果你想使用c++,最好使用标准库。这些库是高效的,隐藏了指针的复杂性(和麻烦),有时更容易调试代码。然而,在某些情况下,它显示使用std::vector
数组和指针数组产生相同的汇编代码。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错