遇到一个很严重很让人困惑的【引用】的问题
有如下两个程序
第一个、
- 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]