知道指针的请留下你的、答案

来源:百度知道 编辑:UC知道 时间:2024/06/19 17:10:29
指针的问题一直搞不清楚,
麻烦大家看看这样的题目,其中可能有错的(不规范的),指出错误,对的说出他的作用
int a ;
char *p ,*q ;
1:*p =*q;
2.*p =q;
3.p = q ;
4.char *p =a ;
5.char *p =&a ;
谢谢你的回答,是我没有把题目描述清楚,以至于我还没有明白
根据你的回答,我有组织了下(假定他们指针已经初始化了!)
int a ;
char *p ,*q ;
1:*p =*q;
2.*p =q;
3.p = q ;
4.char *p =a ;
5.char *p =&a ;
提问:
1和2、3描述有什么具体不同?
4和5描述有什么不同?
这些描述种有么有错误,有请指出来,谢谢!

int a ;
char *p ,*q ;
1:*p =*q;
2.*p =q;
3.p = q ;
4.char *p =a ;
5.char *p =&a ;
--------------------
这些语句分两种类型,一种是变量定义(并赋初值),一种是赋值表达式.
对于变量定义,*表示定义指针,=表示赋初值.
对于赋值表达式,*表示指针解引用,=表示赋值(注意和赋初值有区别)
&表示取地址.
指针本身是要占用内存的,都是占用long类型一样大小的内存.
编译器在表达式中出现不同类型时会自动进行隐式类型转换,有的编译器在有精度损失的转换后给出警告.对不可进行隐式转换的表达式给出错误提示.
----------------------------
int a ; //定义一个int型变量a
char *p ,*q ;//定义指向char类型的指针变量p,q
1:*p =*q; //对q解引用,取得q指向地址的char内容并赋值给p指向的地址
2.*p =q; //直接把q的地址赋向p指向的地址,即char指针赋值给char,不能隐式转换,报错
3.p = q ;
4.char *p =a ;//直接把int赋初值给char类型指针p,不能隐式转换
5.char *p =&a ; //int型的地址赋初值给p,即指针赋值给指针,理论上是正确的,但是意图要正确,因为对p解引用并不是a的内容.

2 / 4是错的
2. 赋值两边类型不一致
4. 赋值两边类型不一致