framework

导航

C++之结构体指针

结构体指针记得初始化,一定要初始化

int main() {
std::cout << "Hello, World!" <<"\n"<< std::endl;
struct Glass glass;
getNumber(&glass);
std::cout << "name=" <<glass.name<<",id="<<glass.id<< std::endl;
return 0;
}
void getNumber(void * temp){
struct Glass *glass2 = new Glass(); //任何指针使用之前一定要初始化
glass2->name ="cccc";
glass2->id=1;
//temp = glass2;//这种方式是无效的
memcpy(temp,glass2,sizeof(Glass));
}


1、结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。
2、结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针。如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率。
所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速。
3、此外为了使用的方便和直观,用指针引用结构体变量成员的方式:

(*指针变量名).成员名

可以直接用:

指针变量名->成员名

来代替,它们是等价的。“->”是“指向结构体成员运算符”,它的优先级同结构体成员运算符“.”一样高。p->num 的含义是:指针变量 p 所指向的结构体变量中的 num 成员。p->num 最终代表的就是 num 这个成员中的内容。

综上所述,以下 3 种形式是等价的:
  • 结构体变量.成员名。
  • (*指针变量).成员名。
  • 指针变量->成员名。

posted on 2021-06-30 15:48  framework开发  阅读(529)  评论(0编辑  收藏  举报