为什么当我使用:

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

上面说longparaula=0?paraula没问题,它包含了我输入的字符的值,但是longpalaula总是0。如果我不初始化longparaula,它总是等于一个任意值。它将等于数组的经度,不是吗?这就像函数可以修改“paraula”的值,但不能修改longparula的值。。。
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的位置的指针。
然后将新值写入指针指向的位置:

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

确保代码不会从longparaula-数组的边界中写出,作为练习。

关于c - C Action 和变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28658160/

10-10 13:36