关于C语言里面指针赋值的类型问题,还有一些关于指针的问题

我马上准备参加全国计算机二级考试,我又几个问题想问下。1.就是关于C语言里面的指针赋值类型是否必须要一致才能赋值,比如说int*p,floatk,现在有个赋值p=k的错误... 我马上准备参加全国计算机二级考试,我又几个问题想问下。
1.就是关于C语言里面的指针赋值类型是否必须要一致才能赋值,比如说int*p,float k,现在有个赋值p=k的错误是不是由于指针赋值的时候,类型必须要一致才行???
2,还有比如说有个char a[]={'a','b','c','d','f','g'},*p;
p=a;
print("%c\n",*p+4):
这个题目的结果是e,那么为什么不是f?,那么*p+4和*(p+4)有什么不同?
3,再看一个,char str[10];
scanf("%s",&str);
这个里面的&str和str是不是一个意思,是指这个字符数组的第一个字符的地址,还是整个字符?
展开
 我来答
naobing111
2011-03-03 · TA获得超过418个赞
知道小有建树答主
回答量:150
采纳率:0%
帮助的人:179万
展开全部
1.
你这个赋值的错误应该是由于=左右的类型不一致造成的。=左边的p是指针类型,而右边是
数值类型。
指针赋值当然也是要一致才行。但是应该这么验证:
int *p; float q; p=&q; //注意q前面的取地址符
2.
*p+4是先取出*p,然后*p的值再加4。对于你说的,*p应该是数组的第一个元素,也就是'a'
,‘a’加上4就是'e'了。
*(p+4)是先计算p+4(此时指针指向了'f'),然后取其值。
3.不是一个意思。赋值的话直接用str就行了,如果加上&的话,就会有错误了。

祝你考试顺利~~
rockrider001
2011-03-03 · TA获得超过1566个赞
知道小有建树答主
回答量:1200
采纳率:100%
帮助的人:1167万
展开全部
1。一个指针一个float完全不同的类型,当然不能赋值
2。你那个数组里哪有e呀?
3。当然不是一个意思,str是一个指针,&str是这个指针的地址,相当于二级指针了
追问
第二个问题是*p+4,不是*(p+4)
追答
*p+4相当于(*p)+4在你的题中,就是‘a’+4
*(p+4) 在题中相当于a[4]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
白石黄海青
2011-03-03
知道答主
回答量:52
采纳率:0%
帮助的人:23.2万
展开全部
1.是。
2.结果没错,*p=a=65,再加4就是69,69就是e。而*(p+4)就是指a[4]。不是一个意思,第一个是指字符首地址,第二个是指第一个字符的地址,二者虽然是同一个值,但意义不同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
loverBB_h
2011-03-03 · TA获得超过274个赞
知道小有建树答主
回答量:424
采纳率:0%
帮助的人:339万
展开全部
1.p=k肯定是不对的,p是指针,k是个浮点数。例如float *p;int k;p=(float*)&k;也是可以的
2.*p+4表示把指针p指向空间的内容+4,即'a'+4,而*(p+4)则表示指针p指向的位置向后数4个的那个位置的值,即'f'
3.&str和str不是一个意思,str指向串首地址,&str是str的地址,可以理解成是地址的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式