7、void*和C结构体

  问:你能设计一个能接受任何类型的参数并返回interger(整数)结果的函数吗?

  答:如下:

int func(void *ptr)


  如果这个函数的参数超过一个,那么这个函数应该由一个结构体来调用,这个结构体可以由需要传递参数来填充。

  8、*和++操作

  问:下面的操作会输出什么?为什么?

#include<stdio.h> 
 
int main(void) 

    char *ptr = "Linux"; 
    printf(" [%c] ",*ptr++); 
    printf(" [%c] ",*ptr); 
 
    return 0; 
}
 


  答:输出结果应该是这样:

[L]  
 
[i]
 


  因为“++”和“*”的优先权一样,所以“*ptr++”相当于“*(ptr++)”。即应该先执行ptr++,然后才是*ptr,所以操作结果是“L”。第二个结果是“i”。

  9、问:修改代码片段(或者只读代码)

  问:下面的代码段有错,你能指出来吗?

#include<stdio.h> 
 
int main(void) 

    char *ptr = "Linux"; 
    *ptr = 'T'; 
 
    printf(" [%s] ", ptr); 
 
    return 0; 
}
 


  答:这是因为,通过*ptr = ‘T’,会改变内存中代码段(只读代码)“Linux”的第一个字母。这个操作是无效的,因此会造成seg-fault或者崩溃。