注册 登录
编程论坛 数据结构与算法

指针值问题

chenzhaoxia 发布于 2016-05-12 15:54, 3700 次点击
三元组.h
Status InitTriplet (Triplet T,ElemType v1,ElemType v2,ElemType v3){
T=(ElemType *)malloc(3*sizeof(ElemType));
if(!T) exit(OVERFLOW);
T[0]=v1; T[1]=v2; T[3]=v3;
printf("%d\n",&T);
return OK;
}
代码:
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define OVERFLOW -2
typedef int ElemType;
typedef ElemType *Triplet;
typedef int Status;
#include"三元组.h"
main(){
int v1,v2,v3,*T=0;
v1=522; v2=5211; v3=5877;
InitTriplet(T,v1,v2,v3);
printf("%d",T[0]);
}
编写完成后能通过编译,但是运行后显示停止工作。我用printf("%d",&T);获得了三元组.h和代码里面的指针,这两个完全不同,为什么?InitTriplet(T,v1,v2,v3);不应该是将指针值赋给三元组.h中的T了吗?他两个的值应该是一样的。
4 回复
#2
ldsh3042016-05-13 11:32
printf("%d",&T);有问题,要输出T的元素可以这样写:
for (int i = 0; i < 3; i++)
    printf("%d",T[i]);
printf("\n");
#3
chenzhaoxia2016-05-13 19:56
谢谢,我打的这个printf("%d",&T);是用来测试三元组.h中T的指针值,主函数中应该还有一个进行比较不过我删除了。现在遇到的问题是这个代码编译能成功,但是运行的时候显示已停止不能运行如果将主函数中的printf("%d",T[0]);删除后就没有问题。
#4
ldsh3042016-05-14 19:55
回复 2楼 ldsh304
你只是在InitTriplet()中给T动态分配内存,
而在主函数中T只是一个int类型的指针,编译器并不能识别T[0]
#5
chenzhaoxia2016-05-15 08:31
回复 4楼 ldsh304
谢谢我明白了。
#6
chenzhaoxia2016-05-15 08:31
回复 4楼 ldsh304
谢谢我明白了。
1