以下是C语言代码,实现了上述要求:
```c
#include
int main() {
// (1)定义指向指针的指针变量p和整型指针数组int *a[3]
int *p;
int *a[3];
// 定义整型变量x, y, z
int x = 10, y = 20, z = 30;
// 使指针数组a中的每一个元素分别指向变量x,y,z
a[0] = &x;
a[1] = &y;
a[2] = &z;
// 使p指向数组a的每一个元素
for (int i = 0; i < 3; i++) {
p = a + i; // p指向数组a的当前元素
printf("Value of %c: %d, Address: %p\n", 'x' + i, *(p), (void *)p);
}
// (2)定义指向指针的指针变量pt和字符指针数组s
char *pt;
char *s[3];
// 使数组s中的每一个元素分别指向字符串“hello”、“world”,“123”
s[0] = "hello";
s[1] = "world";
s[2] = "123";
// 利用指向指针的pt将指针数组s指向的每个字符串输出
for (int i = 0; i < 3; i++) {
pt = s + i; // pt指向数组s的当前元素
printf("String %d: %s\n", i + 1, *pt);
}
return 0;
}
```
这段代码中,我们首先定义了一个指向指针的指针变量`p`和一个整型指针数组`a`。然后定义了三个整型变量`x`、`y`和`z`,并将指针数组`a`的元素分别指向这三个变量。通过循环,我们使用`p`遍历数组`a`并输出每个变量的值和地址。
接着,我们定义了一个指向指针的指针变量`pt`和一个字符指针数组`s`。将字符指针数组`s`的元素分别指向三个字符串常量。同样通过循环,我们使用`pt`遍历数组`s`并输出每个字符串的内容。
注意:`printf`函数中使用的`%p`格式化字符串用于打印指针地址,输出的地址可能会因编译器、操作系统和程序运行时的不同而不同。在`printf`中使用`(void *)p`是为了避免编译器警告,因为`%p`期望一个`void *`类型的参数。