【发布时间】:2020-12-16 04:51:17
【问题描述】:
我有一个获取整数作为参数的函数。我想向它发送一个 char 数组的地址,然后从它的地址打印数组。我的意思是:
void printSomeThing(int x){
printf("Variable is: %s\n", /*What to type here?*/);
//I want this printf to write "file.txt"
}
....
int main(){
char filename[10] = "file.txt";
char *filePointer = filename; //So it points to filename[0]'s address.
int x = /*How to convert the address of the pointer (or the char array) to an integer?*/
printSomeThing(x);
}
所以,我想将 char 数组的地址发送给函数并打印该地址的值。
注意:我无法更改 printSomeThing 参数。它必须是int。
【问题讨论】:
-
您可以尝试将指针转换为
int,然后再转换回char *,但它可能不起作用(未定义的行为)。在许多系统上这是不可能的,例如指针为 64 位但int仅为 32 位的 64 位系统。代码会编译,但运行时很可能会崩溃。 -
为什么需要这样做?您要解决的实际问题是什么?将指针值传递给函数的方法是使用指针类型的参数。
-
首先要做的是在你的代码中添加
printf("%zu %zu\n", sizeof(filePointer), sizeof(x));。如果它打印两个不同的数字,那么您根本无法做到您所希望的。 -
@NateEldredge 是对的。正确的方法是将指针指向 C99 中提供的
uintptr_t(如果我错了,请有人纠正我)。除此之外,将指针转换为整数通常会导致坏事发生。