C Action 和变量

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

提前致谢!

最佳答案

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 数组的边界留作练习。

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

相关文章:

c - 尝试编译 TPC-H Benchmark 并返回此错误 ld : library not found for -lgcc

c++ - OpenCV - 如何在我的 LAN 中的单独主机中处理视频的每一帧?

c++ - 是否可以*安全地*从函数返回 TCHAR*?

MySQL建一个变量名?

java - 在另一个类的方法中使用驱动程序类中的变量 (java)

linux - bash:如何在 for 循环中访问 "dynamic declared variable"

我们可以将格式说明符字符串的地址传递给 printf

c - MPI_Bcast 动态二维结构数组

Python:(显式)字符串参数会损害性能吗?

Matlab 开关库