我碰到一个代码段,其中添加了一个修复程序,用于删除编译器警告。
之前:
Function CountColorChanges(rng As Range) As Integer
Dim i As Integer
With rng.Columns
If .Count > 1 Then
For i = 1 To .Count - 1
If rng.Cells(1, i + 1).Interior.Color <> rng.Cells(1, i).Interior.Color Then CountColorChanges = CountColorChanges + 1
Next i
End If
End With
End Function
之后:
int test;
SYSTEM_START_Function(0, &test);
具有:
int test;
SYSTEM_START_Function(0, &(char)test);
谁能告诉我这是正确的语法吗?如果是,请说明编译器将如何解释它。
答案 0 :(得分:1)
由于test
是int
,所以&test
是指向int
的指针。您正在调用的函数的第二个参数中期望有一个指向char
的指针。
用于将一种类型的事物转换为另一种类型的事物的C运算符是强制转换运算符。它的格式为(
类型名称 )
表达式。
指向char
的指针的类型名称为char *
。要获取test
的地址并将其转换为指向char
的指针,请编写:
(char *) &test
在C中支持此特定转换,可能要考虑到正在使用的软件引起的各种警告。 (系统函数将任意对象视为字节序列是很正常的。)但是,您应该注意,并非所有的指针转换都是正确的C。在转换为除字符对象指针以外的指针类型之前,您应该学习C关于指针转换的规则。