c++ - 在此示例中使用指针的好处?

标签 c++ pointers

我是从 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);
}

最佳答案

I see many people say pointer helps to save memory or good in memory management.

这不是一般指针的用途。在您的示例中,如果 struct 大于指针,指针将帮助您节省内存和数据传输。

第一个例子在传递参数时复制了struct。这意味着两件事:

  • 将复制整个结构,即使是一个大结构,并将拷贝传递给函数
  • 函数内部的任何修改对调用者都是不可见的。

第二个例子传递了一个指针,所以

  • 只有指针被复制,并且
  • 对传递给函数的原始参数执行更改(如果有)。

您的第三个示例具有未定义的行为,因为您传递的指针未分配。

注意:您的问题没有询问引用,但有一个与指针密切相关的结构可以让您节省参数复制空间,并让函数对原始文件进行修改值(value)。所有这一切都是在保持点 . 访问成员的语法的同时发生的,就好像它是一个 struct,而不是一个指针。

关于c++ - 在此示例中使用指针的好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39738242/

相关文章:

pointers - 分配 block 指针: differences between Objective-C vs C++ classes

c++ - gtkmm,如何让我的程序等待按钮的点击信号?

c++ - 查看 FILE 流的地址时,为什么地址与原始指针的地址相差如此之大?

c++ - Freetype 2. 加载后是否可以更改字体大小(以像素为单位)?

C++ 嵌套模板类语法

c++ - 尽管使用等效语句但出现段错误的原因

c - 指针、取消引用和引用

c - **结构的重新分配问题

c++ - VC++ 运行时错误 : Debug Assertation Failed

c++ - 使用 | 传递参数