對不起,如果這已經被問過,但我有點混淆傳入和賦值給結構。將結構傳遞給一個函數並分配它
typedef struct test {
int x;
int y;
} test_t;
void func(test_t * test)
{
test_t second;
second.x = 2;
second.y = 3;
*test = second;
}
void main()
{
test_t first;
func(&first);
}
這是有效的嗎?如果我沒有記錯的話,沒有在func()內部結構化malloc,你不應該把func()中的指針* test指定給struct second,因爲它的作用域主要在func()內部,並且一旦函數返回就會丟失。但是,在main()中打印出來的值是正確的。
有什麼不同的方法來實現這個結果?這只是爲了澄清一些混亂和健忘的記憶。
編輯:
的什麼,我試圖做的是這方面的一個更清楚的例子:
typedef struct args
{
int status;
int id;
unsigned long long start_address;
unsigned long long end_address;
unsigned long long size;
} args_t;
void ioctl_call(args_t *args)
{
args_t params;
/* get values */
ioctl(fd, cmd, params);
*args = params;
}
void main()
{
args_t args;
iotcl_call(&args);
printf("%d\n", args.id);
}
爲什麼創建'second',然後踩着'test'呢?爲什麼不直接操作'test'呢? – tadman
@tadman這是示例代碼。這並不意味着有用;它的意思是指出一些東西。 – HTNW
我的問題依然存在。在什麼情況下不會直接操縱它是更好的選擇? – tadman