为什么我使用:
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;
}
提前致谢!
答案 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
- 数组的边界留作练习。