我从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);
}
答案 0 :(得分:1)
我看到很多人说指针有助于节省内存或有助于内存管理。
一般来说,这不是指针。在您的示例中,如果struct
大于指针,指针将帮助您节省内存和数据传输。
第一个示例在传递参数时复制struct
。这意味着两件事:
第二个例子传递一个指针,所以
你的第三个例子有未定义的行为,因为你传递的指针是未分配的。
注意:您的问题不会询问引用,但是有一个与指针密切相关的构造,可以节省参数复制的空间,并且它允许函数对原始文件进行修改值。在保持用于访问成员的点.
语法时发生的所有事情,就好像它是struct
,而不是指针。
答案 1 :(得分:-1)
如果您想使用C ++,最好使用标准库。这些库是高效的,隐藏指针的复杂性(和麻烦),有时更容易调试代码。但是在某些情况下,它已经显示使用Thread.sleep()
数组和指针数组生成相同的汇编代码。