c中指针的一个问题

时间:2008-05-10 10:58:41   来源:论坛整理  作者:  编辑:chinaitzhe
以下代码:我想得出一维指针和二维指针指向的地址,看是否指向同一地址,但为什么程序会崩掉呢?我认为没错误呀!!请高手指点!!
#include <stdio.h>
int main()
{
int i;
int a[5]={1,2,3,4,5};
int *num[5];
int **p;
p=num;
printf("%p\n",num); //我想得出一维指针指向的地址???(这样做正确吗)
printf("%p\n",p); //我想得出二维指针指向的地址???
for(i=0;i <5;i ) //为什么不运行呢???
{
printf("%d\n",**p);
p ;
}
}
网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/







#include <stdio.h> 

int main() 

{ 

    int i; 

    int a[5]={1,2,3,4,5}; 

    int *num[5]; 

    int **p; 

    p=num; 

    printf("%p\n",num); //我想得出一维指针指向的地址???(这样做正确吗) 

    printf("%p\n",p);  //我想得出二维指针指向的地址??? 



    for(i=0;i<5;i  ) 

        num[i] = a i;

    for(i=0;i<5;i  )   //为什么不运行呢??? 

    { 

        printf("%d\n",**p); 

        p  ; 

    } 

}






网友回复:没猜错的话崩溃出现在这
printf("%d\n",**p);

你的指针未被初始化,这么弄很轻易出现PGF,访问违例
网友回复:1.你的指针数组int *num[5]根本就没有被初始化或者被赋值过
2.假如你想要你写的这个for循环正常工作,就要把num的5个元素都赋值
3.即使完成2,这个for循环也可能不是你想要的结果,它只是输出num的5个元素指向的数组的第一个值

C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





#include <stdio.h> 

int main() 

{ 

    int i; 

    int a[5]={1,2,3,4,5}; 

    int b[5]={2,3,4,5,6};

    int c[5]={3,4,5,6,7};

    int d[5]={4,5,6,7,8};

    int e[5]={5,6,7,8,9};

    int *num[5];

    num[0] = a;

    num[1] = b;

    num[2] = c;

    num[3] = d;

    num[4] = e;

    int **p; 

    p=num; 

    printf("%p\n",num); //一维指针指向的地址

    printf("%p\n",p);    //二维指针指向的地址

    for(i=0;i<5;i  )

    { 

        printf("%p\n",*p);    //每个一维指针指向的地址

        p  ; 

    }



    return 0;

}





做了一些修改,lz 自己运行看看吧
网友回复:在定义指针时切记尽量初试话,不然你的指针是野指针,在应用的时候造成程序崩溃很正常
网友回复:没有崩溃呀
#include <stdio.h>
int main()
{
int i;
int a[5]={1,2,3,4,5};
int *num[5];
int **p;
p=num;
printf("111 %p\n",num); //我想得出一维指针指向的地址???(这样做正确吗)
printf("222 %p\n",p); //我想得出二维指针指向的地址???
for(i=0;i <5;i ) //为什么不运行呢???
{
printf("%d\n",**p);//////没有输出是因为你的num数组没有被赋值
p ;
}
}

whf@wanghf:~$ gcc a.c
whf@wanghf:~$ ./a.out
111 0xbf9b4f08
222 0xbf9b4f08
-1080340680
-16727095
1222716
-1080338113
-1080340584
/////
网友回复:其实用malloc分配一下地址就可以了
网友回复:没有明白你想最后运行什么。看1楼的哥哥写的意思输入这个东西,用**P这个。
你把P与num的地址连上了,没有把a[5]的地址也连上吧。。。个人观点。
printf("%p\n",num); //我想得出一维指针指向的地址???(这样做正确吗)
printf("%p\n",p); //我想得出二维指针指向的地址???
这么看地址,我觉得对,我就一直认为这个就是地址。个人观点。。
网友回复:请做如下修改:
void main()
{
int i;
int a[5]={1,2,3,4,5};
int *num[5];
int **p;
*num=a;
p=num;
printf("%p\n",*num); //我想得出一维指针指向的地址???(这样做正确吗)
printf("%p\n",p); //我想得出二维指针指向的地址???
for(i=0;i <5;i ) //为什么不运行呢???
{
printf("%d\n",**p);
(*p) ;
}
}
关键字:指针,一个,问题,

相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面