#include<stdio.h> int main(){ int **p,*a[3]; i

动态 未结 0 2
邮箱用户_pb5l1
邮箱用户_pb5l1 LV1 3小时前 发表
摘要:
#include<stdio.h> int main(){ int **p,*a[3]; int x=11,y=22,z=33; a[0]=&x; a[1]=&y; a[2]=&z; int i; for(i=0;i<3;i++){ *(*(p+i))=*a[i]; *(p+i)=a[i]; printf("%d\t%p\n",*(*(p+i)),*(p+i)); } }
在提供的代码中,存在一些问题,这些问题会导致编译错误或者运行时错误。让我们一步步分析并修复这些问题。 1. 变量 `p` 是一个指向指针的指针,但是它没有被初始化。在尝试通过 `p` 访问数组 `a` 的元素之前,我们需要将 `p` 初始化为指向 `a` 的指针。 2. 在 `for` 循环中,`*(*(p+i))` 的使用是不正确的。因为 `p` 没有被初始化为指向 `a` 的正确地址,所以这里访问的是未定义的内存。 3. 在 `for` 循环中,`*(p+i)=a[i];` 这行代码尝试将 `a[i]` 的地址赋值给 `p` 指向的数组,但是这不是我们想要的行为。我们应该是直接打印 `a[i]` 指向的值和地址。 下面是修正后的代码: ```c #include int main() { int *p, *a[3]; int x = 11, y = 22, z = 33; a[0] = &x; a[1] = &y; a[2] = &z; int i; // 初始化p为指向a的指针 p = a; for (i = 0; i < 3; i++) { // 直接打印a[i]指向的值和地址 printf("%d\t%p\n", *a[i], (void *)a[i]); } } ``` 在这个修正后的代码中,我们初始化了 `p` 为指向 `a` 的指针,然后在 `for` 循环中直接使用 `a[i]` 来访问和打印值和地址。注意,我们在打印地址时使用了 `(void *)` 来避免编译器警告,因为 `printf` 的 `%p` 格式说明符期望一个 `void *` 类型的参数。
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复