将struct传递给函数C.

时间:2015-11-19 03:58:29

标签: c pointers struct typedef modular

我初始化了3个使用typedef定义的缓存实例。我已经通过以下方式在一系列if语句中对它们进行了一些处理:

cache cache1;
cache cache2; 
cache cache3; 
int a;

void main(...) {
 if (a == 0) { 
 cache1.attribute = 5; 
} 
else if (a == 1) {
 cache2.attribute = 1;
}
else if (a == 2) {
cache3.attribute = 2 ;
}

但是现在我需要通过以下方式使设计模块化:



cache cache1;
cache cache2;
cache cache3;

void cache_operator( cache user_cache, int a ) {
  user_cache.attribute = a;
}

void main(...) {
  if (a == 0) {
    cache_operator(cache1,5);
}
  else if (a == 1) {
  cache_operator(cache2,1);
}
...




我将缓存传递给方法时遇到问题。我习惯了java编程,而且我对c指针并不熟悉。但是,如果我如上所示传递缓存本身,我会在堆栈上传递缓存副本,然后生成与原始代码不同的结果。在将适当的缓存传递给函数并确保正确访问它时,如何将第一个设计正确转换为第二个设计。

1 个答案:

答案 0 :(得分:2)

在C语言中,如果您想跟踪原始数据'而不是在函数中创建副本,您必须将该数据的指针传递给该函数。

C中的指针就像JAVA中对象的引用一样。

以下是您的操作方法。

void cache_operator( cache *user_cache, int a ) 
{
    user_cache->attribute = a;
}

以下是你如何调用该函数。

 cache_operator(&cache1,5);

我也开始使用JAVA。我不知道为什么现在有些大学使用JAVA作为开始语言...这很奇怪,因为JAVA是一种高级语言,用于抽象低级细节,而C是一种相当低级的语言。在过去,情况永远不会如此......