C动作和变量

时间:2015-02-22 13:10:54

标签: c function variables action

为什么我使用:

char paraula[15];
int longparaula=0;
copia_paraula(paraula, longparaula);

它说longparaula = 0? paraula它没关系,并且包含了我输入的字符值,但是longparaula总是为0.如果我没有初始化longparaula,它总是等于一个随便的值。它将等于阵列的经度,不是吗?这就像函数可以修改“paraula”的valueo,但是不能修改longparaula的值......

void copia_paraula(char taula[15], int Longitud){
     int i=0;
     while ((c!=' ') & (c!='.')){
           taula[i]=c;
           scanf("%c", &c);
           i++;
     }
     Longitud=i;
}

提前致谢!

1 个答案:

答案 0 :(得分:2)

C是按值传递的。

这意味着在调用copia_paraula()Longitud会收到longparaula中存储内容的副本。

copia_paraula()内,代码只修改Longitud,即longparaula的副本。这就是Longitud不会改变其价值的原因。

要通过传递其地址将“传递”向下传递给longparaula,指针指向存储longparaula的位置。

然后将新值写入指针指向的位置:

void copia_paraula(char taula[15], int * pLongitud)
{
  int i = 0;
//  while ((c != ' ') & (c != '.')) // you do not want to perform a bit-wise "and"-operation
  while ((c != ' ') && (c != '.')) // but a logical, && is the logical "and"-operator
  {
       taula[i] = c;
       scanf("%c", &c); 
       i++;
  }

  *Longitud = i;
}

这样称呼:

char paraula[15];
int longparaula = 0;
copia_paraula(paraula, &longparaula);

确保代码不会写出char - 数组的边界留作练习。