我有一个名为char clientes_dni[]
的全局变量。我(从主要)调用一个函数:comprobarExistenciaDNI(clientes_dni)
。我的函数comprobarExistenciaDNI
是:
bool comprobarExistenciaDNI(char DNI[]) {
/// Change to lower DNI last word
DNI[8] = tolower(DNI[8]);
return (true);
}
如果我的var的值为'11111111J',则在函数之后值为'11111111j'。我不使用全局变量,只使用局部变量,所以......为什么clientes_dni
的值被改变了?
谢谢。
答案 0 :(得分:3)
我认为问题是DNI是一个数组(一个指针)所以当你说
时你实际上正在修改数组的内容DNI[8] = tolower(DNI[8]);
通过引用函数发送变量就好了。
你有使用指针的经验吗?
编辑1:
我会给你一个快速扰流板。指针是内存地址的值。就像我说的,一个数组就是一个指针,这个指针就是一个指针。到内存中数组的第一个元素(元素是彼此相邻的元素)所以当你发送clientes_dni时,你将第一个元素的位置发送到comprobarExistenciaDNI函数。然后,该函数修改该内存地址的值(内容)。这就是为什么它在主范围内被修改的原因,因为你修改了内存地址的内容。
当您发送任何其他数据类型的变量时,您发送的是变量的副本而不是变量本身。
答案 1 :(得分:1)
数组通过第一个元素的地址传递。在大多数用例中(例如sizeof
运算符之类的例外),数组的名称(让我们说A
)与&A[0]
同义。 structs
是按值传递的,如果这是你要做的事情(将数组包装在struct
中)。
答案 2 :(得分:1)
您的局部变量是指针类型,它引用全局字符串。 '阵列'函数的参数不会被分配和深度复制,而是绑定到地址。