为什么当我使用:
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/