首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

遇到一个很严重很让人困惑的【引用】的有关问题

2012-05-11 
遇到一个很严重很让人困惑的【引用】的问题有如下两个程序第一个、C/C++ code#include stdio.htypedef int

遇到一个很严重很让人困惑的【引用】的问题
有如下两个程序
第一个、

C/C++ code
#include <stdio.h>typedef int datatype;//假如把这里写成typedef *int datatype;怎么就不能编译通过了?void vist(int &);int main(){    datatype a;    printf("请输入一个数a:\n");    scanf("%d",&a);    printf("a为%d\n",a);    vist(a);    return 0;}void vist(datatype &b)//b是a的引用{    printf("b为%d\n",b);}

以上程序中为什么把typedef int datatype;改成typedef *int datatype;就不能运行了?
而以下程序就是这样的却可以

第二个、
C/C++ code
#include<stdio.h> ......typedef struct BiTNode   {     int data;     BiTNode *lchild,*rchild; }BiTNode,*BiTree; //这里BiTree表示的是指针类型的变量void CreateBiTree(BiTree &T)//这里T是Tree的引用,而BiTree表示的是指针类型的变量      //如果把前面的“*BiTree”改为“BiTree”,可以这样理解吗?即理解为:void CreateBiTree(BiTree *&T),      //我感觉这里和第一个程序的原理是一样的,所以第一个程序改了以后也应该是对的,可是不知道我理解的对不对{    ......    T=(BiTree)malloc(sizeof(BiTNode));    ......}void main(){    BiTree Tree;    InitBiTree(Tree);     ......}    //完整代码为:#include<malloc.h> #include<stdio.h> #include<stdlib.h> typedef struct BiTNode{     int data;     BiTNode *lchild,*rchild; }BiTNode,*BiTree;void CreateBiTree(BiTree &T){     int number;    scanf("%d",&number);     if(number==0)         T=NULL;    else     {         T=(BiTree)malloc(sizeof(BiTNode));         if(!T)            exit(-1);        T->data=number;         CreateBiTree(T->lchild);         CreateBiTree(T->rchild);     }}void PreOrderTraverse(BiTree T){     if(T)     {         printf("%d\t",T->data);         PreOrderTraverse(T->lchild);         PreOrderTraverse(T->rchild);     }}void main(){    BiTree Tree;    printf("按先序次序输入二叉树中结点的值,输入0表示节点为空,输入范例:1 2 0 0 3 0 0\n");    CreateBiTree(Tree);     printf("先序递归遍历二叉树:\n");    PreOrderTraverse(Tree);}

路过的高手牛人们,请帮忙,指教指教,小弟将不胜感激

[解决办法]
*int 是什么类型??
可以那么理解,引用其实就是用指针来实现的。
[解决办法]
datatype a;
printf("请输入一个数a:\n");
scanf("%d",&a);

如果datatype 是int*

int* a

printf("请输入一个数a:\n");
scanf("%d",&a);// 这里是什么???
[解决办法]
没问题啊?
typedef int* datatype;

int main()
{
datatype type =new int();
*type = 0;
delete type;
return 0;
}
[解决办法]
C/C++ code
#include <stdio.h>typedef int datatype;//假如把这里写成typedef int *datatype;怎么就不能编译通过了?void vist(int &);//---->void vist(datatype &);int main()
[解决办法]
void vist(int &);

int & 什么意思?&不能是变量名也不是变量类型。

至于改成指针的问题,编译器报错说得很清楚
format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int **’ [-Wformat]

热点排行