使用结构体指针作为参数赋值传递时的注意点

在函数传参过程中,可能会遇到传递的参数为结构体的指针的情况。这个时候再给结构体赋值时,需要注意几点。
给结构体赋值的情况如下:

typedef struct
{
	int key;
	int num;
}test;
void fun(test * m_test)
{
	test stest;
	stest.key=1;
	stest.num=1;
	//需要将这个test结构体的值通过参数传递出去,即将stest的值赋给m_test
}

一、错误做法

  1. 不能使用m_test= &stest;,因为这样会改变m_test的指针的位置,就起不到传递参数改变指定位置数据内容的目的了。
  2. 不能使用memcpy(m_test,&stest,sizeof(test));,因为这样会将stest的内容,都赋值给m_test的key值,即key的指针位置上,因为结构体的每一个键,都会对应一个指针位置。这个从对结构体的使用可以看出,比如key值,指针写成m_test->key,而num值,指针写成m_test->num,这个->代表着不同指针。

二、正确做法
将结构体指针的每一个键所对应的指针分别赋值。才能正常传递。

void fun(test * m_test)
{
	test stest;
	stest.key=1;
	stest.num=1;
	m_test->key=stest.key;
	m_test->num=stest.num;
}

你可能感兴趣的:(C++,QT,qt,c++)