C 动作和变量

C actions and variables

为什么我使用:

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;
}

提前致谢!

C是按值传递。

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

copia_paraula() 中,代码只是修改 Longitud,即 longparaula 的副本。这就是为什么 Longitud 不改变它的值。

通过传递其地址,指向 longparaula 存储位置的指针,将 "reference" 向下传递到 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-数组的边界留作练习。