C语言指针问题(求高人指点啊)

作者&投稿:恽炉 (若有异议请与网页底部的电邮联系)
C语言指针难题,求解,求高人指点.~

dog,d
cat,a
bird,r

指针也是一种数据类型,所以在C中也必须先定义在使用。和其他的定义一样如整型(int),指针类型的也可以在定义时赋值,就是这样int *p=&i1,但是如果去掉类型说明int该语句不成立。p=&i1是赋值语句,使用前必须定义p为指针类型。int *p=&i1是声明语句,包含两层一定义p为整型指针,二将p赋值为&i1。你可以比较着int a=1000;和a=1000;这两个语句不要被*和&弄晕了!

让我来帮你综合一下!!!
1、int *p,*q;q=p;
这句基本是对的(但要看你怎么用),首先定义了*P,*q两个指针,q=p这句是将地址p赋给了q,没有问题;
看下面两个句子:
printf("%d",q);----这个句子是正确的,它只是把q中的地址(既p的地址)输出!!
printf("%d",*q);----但这个句子就是错误的了!!*q为p中数据的值!因为p中的内容是未被定义的,所以编译器会在运行是出错哦!!!

int a,*p,*q;p=q=&a; -----这个同上面的道理是一样的,

printf("%d",q);----正确,输出a的地址;
printf("%d",*q);----如果a没有被定义,那么编译器就会报错咯!

2 int a,*p,*q;q=&a;p=*q;
int a=20,*p;*p=a;

分析下:如果这是在一个程序中,第一错就在重定义上!第一行定义了a,*P,第二行又定义a,*p!--重定义下面就不说了,
第二个错在 p=*q;看来你还没理解指针变量,书上明确定义指针变量只能用来存放地址!而*q是一个具体的值(数或者字符什么的)!
第三个隐性错误!*p=a;从你的定义看,指针p未被初始化!(p=*q是错误的)如果你把p=*q改成p=q那么*p=a;就没问题了。如果你删了p=*q,那就错咯!

3 int a=b=0,*p;p=&a;b=*p
int a=20;*p,*q=&a;*p=*q;

分析下:int a=b=0;定义整型变量a,b,但在不同的编译器上不一定正确。有的机子上你要这样定义才正确:int a,b;a=b=0;
*p;p=&a;b=*p:---定义了指针p把a的地址给了p,在把p中存放地址的值(既a的值)给b;-----这句明显是正确的哦!
看下一句:int a=20;*p,*q=&a;*p=*q;错啦!!(标点符号也错啦!)
第一个错:明显p没有初始化!运行是会报错!
第二个错:*q=&a,*q是一个具体的值,而&a是变量a的地址。两者是不能相等的;要明白p存放的是地址,而*p存放的是值。(不考虑多重指针的情况)
看下一句:*p=*q---是正确的,意思是把q所指向的地址上的值给p指向的地址的指。给你个例句:
int a=10,b=20;
int *p=&a,*q=&b;
*p=*q;
结果很明显a=20;既*p=20

4 int a=20;*p,*q=&a;p=q;
int p,*q;q=&p;

最后一点啦!第一行!看似没错!其实---,事实上c语言的定义不能在一次定义中引用此次定义的其他变量!像你的int a=20;*p,*q=&a;p=q;
*q=&a,由于a属于此次定义中的变量,所以出错咯!应该分开定义就OK啦!
int a=20;
int *p,*q=&a;p=q;
注意一点int *p=&a;初学者很不明白!不是,*q是一个具体的值,而&a是变量a的地址。两者是不能相等的;??那为什么这里又正确呢?

其实这有一个误区,你可以这样看(int *)p=&a;当然这样定义是错的
我只是说这样看!在定义指针时把指针定义符‘*’与前面的类型‘int’看成一块!int *p=&a;与下面句子等效
int *p; p=&a;
而int *p; *p=&a是错误的!!

最后一句:int p,*q;q=&p;
注意你这里p是一个整型的变量!!不是指针!像前面的a,b.
明显这句是正确的!

不知道满意不?

1、int *p,*q;q=p;
这句应该是对的,首先定义了*P,*q两个指针,q=p这句是将地址p赋给了q,没有问题;
int a,*p,*q;p=q=&a;
这句也应该是对的,首先定义了*P,*q两个指针和一个整型变量a,p=q=&a这句是将变量a的地址赋给了q和p,没有问题;&a是取变量a的地址的意思,这样做是因为指针存放的就是地址。
2 int a,*p,*q;q=&a;p=*q;
这句里前面没问题,但是p=*q应该是错的,P是一个地址,而*q则是一个具体的值,是不能将值赋给地址变量的。
int a=20,*p;*p=a;
这句没有问题,a是一个代表具体的值的变量,而*p也是,所以没问题。
3 int a=b=0,*p;p=&a;b=*p
这句没问题,可以参照前面所说的。
int a=20;*p,*q=&a;*p=*q;
是不是标点符号有误呀?那个分号?
然后,语法上,*p=&a这个有问题,*p是值而&a是地址,不匹配。
4 int a=20;*p,*q=&a;p=q;
这跟上面一句一样,*q=&a有问题。
int p,*q;q=&p;
没问题。

1、q=p;错误,p是一个指针但p并未被赋值,p中的内容是不确定的,贸然赋给q可能会报错,第二行正确
2、p=*q;错误,p是指针而*q是指向int的即是a,类型不同会报错
第二行p虽被定义为指针但并未初始化,p中的内容是不确定的,*p=a操作会报错
3、第一行正确
第二行错误,int a=20;*p,*q=&a;*p=*q; 首先p q没有定义类型,其次p没初始化,不能进行赋值操作
4、第一句改为int a=20;int *p,*q=&a;p=q; 就对了
第二句正确


C语言指针数组问题 求高手详解
语句 if(k<3) p[k]=m+2*k*k;的计算过程序,当k=0时,p[0]=m也就是指针p[0]指向的是数组m的开始 当k=1时,p[1]=m+2;因此p[1]指向m+2的位置,也就是从数字4开始的位置 当k=2时,p[2]=m+8;因此p[1]指向m+8开始的位置,也就是&m[8]开始的位置,即数组m中的第9个...

C语言指针问题(求高人指点啊)
第二个错在 p=*q;看来你还没理解指针变量,书上明确定义指针变量只能用来存放地址!而*q是一个具体的值(数或者字符什么的)!第三个隐性错误!*p=a;从你的定义看,指针p未被初始化!(p=*q是错误的)如果你把p=*q改成p=q那么*p=a;就没问题了。如果你删了p=*q,那就错咯!3 int a=...

C语言指针易错问题【附图+高分】
1.这个题和你前面的提问,都是关于指针的问题,因为指针太灵活,你可以画个跳转图来标记每个指针指向的内容,这样就好理解了。2.任何变量都需要有存储空间,每个存储空间对应一个存储地址,比如指针p,即p有一个存储地址,该存储地址对应的存储空间放的是p指向的地址;3.*p表示p是个指针,即p的值是个...

c语言中指向结构体指针问题,求大神,为甚么printf("%d",*p);错误*去掉...
p是结构体指针,s是结构体数组,指针也是数字,应该是长整型数字,s[0].num是结构体数组中的一个普通整型数字,p=(struct student*)s[0].num;这一行虽不报错,但p指向的单元的内容是未知的,类型也是未知的,不建议这样做;所以printf("%d",*p);这一行以数字格式输出*p就报错了,把*去掉,输...

C语言中,关于指针传递的一个问题,求高手解?
指针就是 int* float 就是float*(类推)数据名 遵守变量的命名规则即可;数据:就如前文讲的指针的数据是地址,即数据在电脑中的存储位置,将电脑比作一栋楼,数据比作楼中的房客的话,地址很好理解,最重要的是通过一个数据的地址可以访问到这个数据.在c语言中地址用16进制表示.&:{ >_< : 那么如何...

C语言 关于指针的选择 求教高手
①答案是为B ②*p1=*p2;的意思:【p1指向的地址的内存块的值为p2地址指向内存块上的值】③p1=p2;的意思:【p1指向的地址为p2指向的地址】④为了加深你对指针的理解,我们可以这么认为:p1是一张纸条,上面写着房间号,p2也是。p1=p2;是把p1纸条上的房间号擦掉,改成p2纸条上的房间号。p1=*p2...

新手求教关于C语言的数组与指针问题!求高手!
指向数组的指针pt是”,那就是A了……B——把数组pt的下标为5的元素强制为int *型指针,这错得太多。C——声明pt是有5个int *型指针元素的数组。D——声明pt为x个int *型指针元素的数组,[]中为空,语法都是错误的。A——声明pt是指向具有5个int型元素的一维数组的指针,正确。

c语言指针函数问题,求解题过程!谢谢!
s[d] = s[a] 就是赋值语句,相当于改变主函数中的t数组。总共调用了4次fun函数。1。s[4] = s[0],此时t数组为{1,3,5,7,1} 2。s[3] = s[1] ,此时t数组为{1,3,5,3,1} 后面的你类似再推导就行了,最后的输出是:13531。不过这个程序也有点问题,就是k并没有定义。

关于C语言的问题 求高手解
((unsigned char*)&A) ,A值占用了16个BIT位,&A就是取得到A所在地址,然后将此地址强制转换为一个无符号字符型指针,((unsigned char*)&A)[0]=0就是对那个16个BIT位的第一个8个BIT位赋值为0,((unsigned char*)&A)[1]=1;就是对第二个8BIT位赋值为1,这两个赋值后A值为1 ...

c语言编程问题,求高手解答(高分)
你的程序没有大的问题,可以执行,只是以下几个小问题:一、第一行包含的文件不存在,这一行应该删除。二、定义了argc、argv两个变量没有使用,编译会有警告,可以删除他们或者不管,最好改为:int main()三、scanf输入n和k的时候,中间有个逗号分隔,这样输入的时候会麻烦,最好改为:scanf("%d%d...

蒙山县19233025635: C语言中,关于指针的基础问题,望有高人指点 -
员齿黄龙: 指针也是一种数据类型,所以在C中也必须先定义在使用.和其他的定义一样如整型(int),指针类型的也可以在定义时赋值,就是这样int *p=&i1,但是如果去掉类型说明int该语句不成立.p=&i1是赋值语句,使用前必须定义p为指针类型.int *p=&i1是声明语句,包含两层一定义p为整型指针,二将p赋值为&i1.你可以比较着int a=1000;和a=1000;这两个语句不要被*和&弄晕了!

蒙山县19233025635: 请高人指点一道C语言指针题,线上等 -
员齿黄龙: while(--pb>=b1) strcpy(b2,pb); //循环3次,这个我想你应该能看懂吧 程序的结果为7 最容易错的地方while(--pb>=b1) strcpy(b2,pb); 循环第一次 *pb='c' pb指向了数组b1[2]的位置 第2次 *pb='b' pb指向了数组b1[1]的位置 第3次 *pb='a' pb指向了数组b1[0]的位置 所以执行strcpy(b2,pb); 后,你可以把b2也理解成一个指针,(但不是,它是常量),从pb位置开始进行复制,因为b1[8]中只有7个值,所以b2数组为abcdefg 7个

蒙山县19233025635: C语言指针问题,基础问题,主要是符号愿原因*p=*p+1; 求详细解释 上面语句可以写成 *p+=1;或++*p;或(*p)++; 主要是第三个看不懂,求高手详细解... -
员齿黄龙:[答案] *p++;编译器将先执行++,也就是将地址加1,在执行*来取值,这样取到的是一个无意义的值,(*p)++;用括号提醒编译器先执行*取值,取到值以后,在对这个值加1 总的来说就是不加括号,++运算符作用到指针上,加了之后作用到指针所指的...

蒙山县19233025635: c语言中的指针,搞不懂,真伤脑筋!帮帮忙,麻烦高人讲解,能够理解透彻,能掌握最好!实在很急! -
员齿黄龙: 给你一个最简单的解释,如果你想联系一个人,你可以有两种方式,第一是直接去找这个人,第二是拿到他的电话去打个电话.直接去找相当于直接去访问这个变量,电话就可以理解为指针.因为通过电话号就能找到这个人.一个人可以有多个电话号,但一个电话号一个时间只能对应一个人.所以一个变量可以有多个指针指向他,但一个指针在一个时间只对应一个变量.另外人是可以更换手机号的,比如销号了或者把这个号转给别人,指针也可以指向不同的变量值,当然因为有空号,所以也有空指针. 具体的你可以看看数吧 :) 我就是给你打个比方,能让你更容易理解.

蒙山县19233025635: C语言中的指针请教 -
员齿黄龙: 1.对于这个问题,我给你举个实例吧.一般旅店呢有很多房间,店主一般会在分别编号,这个编号就是各个门的地址了,我们再把各个号码贴在钥匙上,通过钥匙就可以访问各个房间了,而钥匙这个时候就相当于访问的指针了,他上面的门牌号...

蒙山县19233025635: C语言中,关于指针传递的一个问题,求高手解? -
员齿黄龙: 针就是一种用来存储地址(地址指的就是数据在电脑的存储位置)的数据类型;就如int是存整数的,float,double用来存浮点数一样;在c语言中,变量的声明格式为 数据类型|数据名|数据 指针也一样 数据类型:根据要取地址的数值的数据的类型...

蒙山县19233025635: c语言指针问题 -
员齿黄龙: 其实这个很好理解的,不要太深究了*P就是一个指针(指向一个内存地址),用指针的时候就是把某个数放到指针的地址中 方法:1. int *p=&a或int *p;p=&a;还可int *p=5;.....当你定义了某一个指针指向某一个数时,在用到的这个数时就直接用指针即*p;例如:int *p=a,c;//求3+5=?和输出5;a=5;c=*p+3;注意输出5时不时输出*p,printf("%d",*p);这是错的*p仅仅只是内存内的一个地址而已是没有数的,假如你这样输出输出的仅仅是这个数在内存内的地址而已.真确的输出printf("%d",a);2.当你调用函数时如果子函数要用到指针形参也是*p哦

蒙山县19233025635: C语言 指针问题求解!高手来吧 -
员齿黄龙: for(it1 = p; it1 < (p + n); it1++)//相当于for(i=0;i<n;i++) 循环内用p[i]访问//但p[i]使用时需要通过计算地址 p的首地址+i*8/*double的大小 8*/ 来访问//循环次数多的话也耗费时间//所以直接对要访问的地址做递增//应为p是数组首地址 不止1个地方用 就再定义了一个 //建议p+n也用单个变量保存 double *const cpend=p+n;

蒙山县19233025635: C语言指针问题,请会C的进来指教 -
员齿黄龙: C语言指针问题,请会C的进来指教 悬赏分:0 - 离问题结束还有 13 天 13 小时#include "stdio.h" #include "conio.h" char *pp[2][3]={"abc","defgh","ijkl","mnopqr","stuvw","xyz"}; /*这条语句定义了一个pp[2][3]的数组,数组里...

蒙山县19233025635: C语言指针符号问题? -
员齿黄龙: 当你想保存一个地址的时候不加 *:Int a = 0; p = &a; 当你想取指针里的值的时候加 * :int b; b = *p; ==> b = *(&a) ==> b = 0; // 就是说把a地址保存的值取出来.当*p的值还是指针的时候:int *p = NULL; int *q = NULL; int a = 0,b =1 ; q = &a; p = &q; *p= &a; // 结果就是q 指向a , p指向q; (*(*p)) 等于 0;p= &a; // 结果就是p指向a; q 也指向a; p

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网