4.5两个常见C语言指针问题
问题一:我能否用void** 指针作为参数, 使函数按引用接受一般指针?
不可移植。C 中没有一般的指针的指针类型。void* 可以用作一般指针只是因为当它和其它类型相互赋值的时候, 如果需要, 它可以自动转换成其它类型; 但是, 如果试图这样转换所指类型为void* 之外的类型的void** 指针时, 这个转换不能完成。
问题二: 我有一个函数extern int f(int *); 它接受指向int 型的指针。我怎样用引用方式传入一个常数?
下面这样的调用f(&5); 似乎不行。在C99 中, 你可以使用“复合常量”:
f((int[]){5});
在C99 之前, 你不能直接这样做; 你必须先定义一个临时变量, 然后把它的地址传给函数:
int five = 5;
f(&five);
参见问题2.8, 4.4 和20.1。
不可移植。C 中没有一般的指针的指针类型。void* 可以用作一般指针只是因为当它和其它类型相互赋值的时候, 如果需要, 它可以自动转换成其它类型; 但是, 如果试图这样转换所指类型为void* 之外的类型的void** 指针时, 这个转换不能完成。
问题二: 我有一个函数extern int f(int *); 它接受指向int 型的指针。我怎样用引用方式传入一个常数?
下面这样的调用f(&5); 似乎不行。在C99 中, 你可以使用“复合常量”:
f((int[]){5});
在C99 之前, 你不能直接这样做; 你必须先定义一个临时变量, 然后把它的地址传给函数:
int five = 5;
f(&five);
参见问题2.8, 4.4 和20.1。