C语言指针基本概念题---在线等

相信这些题目对你们这些大哥级人物不过是小意思而已,那就请不要辞辛苦,写点解答和原因,谢谢~1.char*a="China";等价于char*a;*a="China"cha... 相信这些题目对你们这些大哥级人物不过是小意思而已,那就请不要辞辛苦,写点解答和原因,谢谢~

1.char *a="China";等价于char *a;*a="China"
char str[10]={"China"};等价于char str[10];str[]={"China"};
是第二个错么?长度不同?还是第一个没有存放的地址?

2.char *s="\ta\018bc";
for(;*s!='\0';S++)
这个for循环会循环几次?这个字符数组里是占了8个位置吧?答案是2次么?还是别的?

3.指针指向数组的第一个元素,能不能说这个指针与这个元素相等?
例如int *p=s;*p是否等于s[0]?我觉得应该是不等

4.char *p;scanf("%s",p)
char str[20],*p=str;scanf("%s",p[2])
两个正误如何?
第一个似乎没有存放的空间?
p[2]即str[2],能不加地址符&吗?它是一个元素么?用"%s"?

以下是一个函数用以获得数组中的最小值以及其下标,有一些错误,但不必改了,你们应该很容易看出它的思路,我想问问,为什么*piMin = *p;能够使piMin返回正确值,piMin = p;就不行了呢?意思上似乎差不多呀?

void getMin(int *p, int length, int *piMin, int *piIndex)
{
int i;
*piMin = *p;
piIndex = 0;
for (i=0; i<length; i++)
{
if ( piMin >*(p+i))
{
piMin = *p
piIndex = i;
}
}
}
void main()
{
int array[12]={3,4,8,9,5,-3,13,25,18,29,-5,33};
int myIndex=0;
int myMinVal=0;

getMin(array, 12, myMinVal, myIndex);
printf("myMinval=%d", myMinVal, myIndex);
}
我想问问哈

2。为什么它不会作为转义来处理呢?\就已经占据了一个字节?我在机器上打出了6个星,这是为什么?

\ta\018bc
\t是一个,a是一个,后面的18bc是四个
我编译的时候看到它直接跳过\0,很想知道为什么它不检查\0呢?

4。即使改成p=str,那使用“%s”来输入可以吗?p[2]应该是一个元素,s是串吧?或者说,用“%s”,只输入一个字符就是合法的?或者说是,输入的串以p[2]的地址作为初地址保存在p指向的数组中?
展开
 我来答
CIW_BLUE
推荐于2016-08-20 · TA获得超过487个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:0
展开全部
很少看见像你这样长的问题,非常好.
1.char *a="China";等价于char *a;*a="China";->完全正确.
因为a就是一个字符指针,"China"也是,("China"是在常量区,其实是指"China"的首地址.)
char str[10]={"China"};等价于char str[10];str[]={"China"};->错误. str[]这样写是字符,比如你可以这样赋值str[0] = 'c'; 而且不能这样写str = "China";因为str是指针常量,不能指向别的地址.

2.char *s="\ta\018bc"; 6次,\是转义字符. 占7位,和结尾0的算上去.
char *s="\ta\018bc"; 被拆成 \t a \01 8 b c 0,所以是7位,和结尾0的算上去.
3.指针指向数组的第一个元素,能不能说这个指针与这个元素相等?不能这么说,指针就是一个地址,元素是一个数值.
例如int *p=s;*p是否等于s[0]?相等.比如:
#include <iostream>
using namespace std;
int main()
{
int s[2] = { 1, 2 };
int *p = s;
cout<< s[0] << endl<< *p <<endl;
return 0;
}

4.char *p;scanf("%s",p)完全错误,因为p不知道指向了那里(没有申请空间)
char str[20],*p=str;scanf("%s",p[2])错误.p[2]是字符,不是字符串,要改成这样scanf("%c",&p[2]).

5.先看改正的吧:

#include <stdio.h>
#include <iostream>
using namespace std;
void getMin(int *p, int length, int *piMin, int *piIndex)
{
int i;
*piMin = *p;
*piIndex = 0;
for (i=0; i<length; i++)
{
if ( *piMin > *(p+i))
{
*piMin = *(p+i) ;
*piIndex = i;
}
}
}
void main()
{
int array[12]={3,4,8,9,5,-3,13,25,18,29,-5,33};
int myIndex=0;
int myMinVal=0;

getMin(array, 12, &myMinVal, &myIndex);
printf("myMinval=%d Index = %d\n", myMinVal, myIndex);
}

指针的间接访问是用*,你这个程序有许多的地方都没有用*,没有用*,其实是这个指针变量本身.
比如:
void getMin(int *p, int length, int *piMin, int *piIndex)
{
int i;
*piMin = *p;
piIndex = 0; //这时候piIndex 将指向一个0的地址,运行将会发生错误.
for (i=0; i<length; i++)
{
if ( *piMin >*(p+i))
{
*piMin = *p ;
*piIndex = i;
}
}
}

还有:
getMin(array, 12, &myMinVal, &myIndex); 最后2个参数要给指针.也就是用&.
百度网友669a36b
2008-05-23 · TA获得超过142个赞
知道小有建树答主
回答量:225
采纳率:0%
帮助的人:0
展开全部
1.第1个怎么会有*a="China" 这样的赋值??不知道是不是你的笔误!
如果是a="China",那地1个也是对的。
第2个就错了。
2.循环6次吧,\是转义字符哦(至少我用gcc编是这样,我不知道其它编译器是否也把它当转义字符)
3.首先*p不是指针,p才是指针。
2个值当然相等。*p表示的是值不是地址,同样s[0]也表示的是值不是地址。
4.第一个是指针,要先申请地址才能使用;所以是错的。
第二个p[2]即str[2],是一个元素;如果要用"%s"的话就要加个&,取地址下。否则即使是输入一个字符也是错的;但是编译时不会错就是。

最后那个程序楼上已经分析了....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天棄
2008-05-17
知道答主
回答量:41
采纳率:0%
帮助的人:20.1万
展开全部
1、是第一个有问题,没给指针分配确定的地址空间。

2、循环9次,char *s="\ta\018bc"; 指派的是每个地址里都存放了对应的一个字符的值,而不是你想当然的转义了。

3、不相等。s在你这是不是一个数组名,是的话那么*p=s这句是把s的首地址赋给*p即p指向的地址里面存放的是s的首地址而不是s指向的地址里存放的数据。

4.char *p;scanf("%s",p) //没开辟内存空间,同第一题。
char str[20],*p=str;scanf("%s",p[2]) //同第三题,*p指向的地址里存放的数据是str这个数组的首地址,应当改成p=str;

最后这个问题你说不要改那我就不改了,只针对“我想问问,为什么*piMin = *p;能够使piMin返回正确值,piMin = p;就不行了呢?意思上似乎差不多呀? ”这句说明一下,*piMin=*p是将p里存放的数据赋给piMin指向的地址,而piMin=p则是把p的地址赋给piMin,即piMin的地址等于p的地址,2个变量指向的是同一个地址,你后面再做各种运算肯定是要出错的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2008-05-23
展开全部
1.
两个都不正确。
char *a="China";等价于char *a;a="China" 而不是*a="CHINA"
char str[10];str[]={"China"}; 初始化器只能用于初始化,不能用于赋值。

2.
会循环2次

3.
不能,指针保存的是一个地址,元素则是某个地址中保存的值。

4.
char *p;scanf("%s",p)
没有为p分配空间
char str[20],*p=str;scanf("%s",p[2])
不正确,p[2]是一个元素,而不是地址,不能省略&

5.
pmin的值在getMin()中是可以改变,它可以指向其它值,所以,如果用了piMin = p,那么pmin就指向了其它的地址,而传入此函数的原地址中所保存的值确没有被修改,所以在主函数中读取的还是没有被修改的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jizj06
2008-05-23 · TA获得超过203个赞
知道小有建树答主
回答量:248
采纳率:0%
帮助的人:135万
展开全部
谁出的题目 题目中有大半是错的。。。。
或者是我看不懂。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式