繁体   English   中英

在这个例子中使用指针的好处?

[英]Benefits of using pointer in this example?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM