在本例中使用指针的好处

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数组和指针数组产生相同的汇编代码。