1. 下面显示了一列声明。
解析:
a. int abc(); VIII. 返回值为int的函数。
b. int abc[3]; III. int型数组。
c. int **abc(); X. 返回值为“int型指针的指针”的函数。
d. int (*abc)(); XI. 返回值为int的函数指针。
e. int (*abc)[6]; IV. 指向“int型数组”的指针。
f. int *abc(); IX. 返回值为“int型指针”的函数。
g. int **(*abc[6])(); XVI. 指向“返回值为int型指针的指针的函数”的指针的数组。
h. int **abc[6]; VII. int型指针的指针的数组。
i. int *(*abc)[6]; VI. 指向“int型指针数组”的指针。
j. int *(*abc())(); XIX. 返回值为“返回值为int型指针的函数指针”的函数。
k. int (**(*abc)())(); XXI. 返回值为“返回值为int的函数指针的指针”的函数指针。
l. int (*(*abc)())[6]; XXIII. 返回值为“指向int型数组的指针”的函数指针。
m. int *(*(*(*abc)())[6])();XXV. 返回值为“指向‘返回值为int型指针的函数指针’的数组的指针”的函数指针。
2. 给定下列声明:
char *array[10];
char **ptr = array;
如果变量加上1, 它的效果是什么样的?
解析:
#include <stdio.h>
#include <stdlib.h>
int main( void ){
char *array[10];
char **ptr = array;
printf( "ptr = %p, ptr + 1 = %p, array + 1 = %p\n", ptr, ptr + 1, array + 1 );
return EXIT_SUCCESS;
}
输出:
3. 假定要编写一个函数,它的起始部分如下所示:
void func( int ***arg );
参数的类型是什么?画一张图,显示这个变量的正确用法。如果想取得这个参数所指代的整数,应该使用怎样的表达式?
解析:
参数的类型是一个指针,该指针又指向另外一个指针,另外一个指针还指向另外一个指针。
如果想取得这个参数所指代的整数,应该使用***arg形式来获取值。图我就不画了,只需要明白指针里面存放的是变量的地址应该就能明白,在这里我用代码显示出来。
#include <stdio.h>
#include <stdlib.h>
void func( int ***arg );
int main( void ){
int value;
int *pi;
int **ppi;
int ***pppi;
value = 20;
pi = &value;
ppi = π
pppi = &ppi;
printf( "pppi = %p, &ppi = %p\nppi = %p, &pi = %p\npi = %p, &value = %p\n", pppi, &ppi, ppi, &pi, pi, &value );
printf( "***pppi = %d, **ppi = %d, *pi = %d, value = %d\n", ***pppi, **ppi, *pi, value );
func( pppi );
printf( "In main function, value = %d\n", value );
return EXIT_SUCCESS;
}
void func( int ***arg ){
int value = ***arg;
printf( "In func function, value = %d\n", value );
}
输出:
4. 下面的代码可以如何进行改进?
Transaction *trans;
trans->product->orders += 1;
trans->product->quantity_on_hard -= trans->quantity;
trans->product->suppiler->reorder_quantity += trans->quan