| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 660 人关注过本帖
标题:[求助]关于指针变量的问题
只看楼主 加入收藏
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
 问题点数:0 回复次数:8 
[求助]关于指针变量的问题

main()
{int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
*(p+i)=i+1;
for(i=0;i<10;i++)
printf("%2d",*(p+i));
getch();
}


main()
{int *p,i,a[10];
p=a;
for(i=0;i<10;i++,p++)
*p=i+1;
for(p=a,i=0;i<10;i++,p++)
printf("%2d",*p);
getch();
}
我想问这两个程序有什么区别?

搜索更多相关主题的帖子: 变量 指针 
2006-03-12 17:43
偶成
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2006-3-4
收藏
得分:0 

没什么区别吧


几年前,丢失了求知欲,游荡在游戏世界中. 而今寻找回了求知欲,希望通过自学充实自己.努力中...
2006-03-12 18:15
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
如果从结果来看,结果是一样的,没有区别.但从过程来看,第二个程序比第一个运行得快.因为第一个程序,循环中每次都要访问数组的每个地址,看第二个程序,指针*P一直指向后面一个,没有每次都访问数组的地址,所以速度快了.

我的原则很简单:不做不喜欢的事!
2006-03-12 18:49
黑衣圣堂
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-13
收藏
得分:0 

指针我学的不好啊,见了晕


我不是一支恣意逃窜的箭,而是一个威灵的射手,我的直感,会引领着,把自我射向,更遥远的,流浪。
2006-03-13 11:45
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
这是第一个程序编译成的汇编

ifndef ??version
?debug macro
endm
endif
?debug S "noname.c"
NONAME_TEXT segment byte public 'CODE'
DGROUP group _DATA,_BSS
assume cs:NONAME_TEXT,ds:DGROUP,ss:DGROUP
NONAME_TEXT ends
_DATA segment word public 'DATA'
d@ label byte
d@w label word
_DATA ends
_BSS segment word public 'BSS'
b@ label byte
b@w label word
?debug C E9158B6D34086E6F6E616D652E63
_BSS ends
NONAME_TEXT segment byte public 'CODE'
; ?debug L 1
_main proc far
push bp
mov bp,sp
sub sp,20
push si
push di
; ?debug L 4
lea di,word ptr [bp-20]
; ?debug L 5
xor si,si
jmp short @5
@4:
; ?debug L 6
mov ax,si
inc ax
mov bx,si
shl bx,1
mov word ptr [bx+di],ax
@3:
inc si
@5:
cmp si,10
jl @4
@2:
; ?debug L 7
xor si,si
jmp short @9
@8:
; ?debug L 8
mov bx,si
shl bx,1
push word ptr [bx+di]
mov ax,offset DGROUP:s@
push ax
call far ptr _printf
pop cx
pop cx
@7:
inc si
@9:
cmp si,10
jl @8
@6:
; ?debug L 9
xor ax,ax
jmp short @1
@1:
; ?debug L 10
pop di
pop si
mov sp,bp
pop bp
ret
_main endp
NONAME_TEXT ends
?debug C E9
_DATA segment word public 'DATA'
s@ label byte
db 37
db 50
db 100
db 0
_DATA ends
extrn _printf:far
NONAME_TEXT segment byte public 'CODE'
NONAME_TEXT ends
public _main
end


淘宝杜琨
2006-03-13 17:23
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
这是第二个
ifndef ??version
?debug macro
endm
endif
?debug S "noname.c"
NONAME_TEXT segment byte public 'CODE'
DGROUP group _DATA,_BSS
assume cs:NONAME_TEXT,ds:DGROUP,ss:DGROUP
NONAME_TEXT ends
_DATA segment word public 'DATA'
d@ label byte
d@w label word
_DATA ends
_BSS segment word public 'BSS'
b@ label byte
b@w label word
?debug C E9438B6D34086E6F6E616D652E63
_BSS ends
NONAME_TEXT segment byte public 'CODE'
; ?debug L 1
_main proc far
push bp
mov bp,sp
sub sp,20
push si
push di
; ?debug L 4
lea si,word ptr [bp-20]
; ?debug L 5
xor di,di
jmp short @5
@4:
; ?debug L 6
mov ax,di
inc ax
mov word ptr [si],ax
@3:
inc di
inc si
inc si
@5:
cmp di,10
jl @4
@2:
; ?debug L 7
lea si,word ptr [bp-20]
xor di,di
jmp short @9
@8:
; ?debug L 8
push word ptr [si]
mov ax,offset DGROUP:s@
push ax
call far ptr _printf
pop cx
pop cx
@7:
inc di
inc si
inc si
@9:
cmp di,10
jl @8
@6:
; ?debug L 9
xor ax,ax
jmp short @1
@1:
; ?debug L 10
pop di
pop si
mov sp,bp
pop bp
ret
_main endp
NONAME_TEXT ends
?debug C E9
_DATA segment word public 'DATA'
s@ label byte
db 37
db 50
db 100
db 0
_DATA ends
extrn _printf:far
NONAME_TEXT segment byte public 'CODE'
NONAME_TEXT ends
public _main
end


淘宝杜琨
2006-03-13 17:24
lickui
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-3-11
收藏
得分:0 
区别还是有一定的!

前者虽然用到了指针,但是原理跟一维数组的操作很相象.

main()
{int *p,i,a[10];
p=a;/*使p指向a数组的首元素的地址*/
for(i=0;i<10;i++)
*(p+i)=i+1;/* 给*(p+i)赋值,*(p+i)就相当与a[i] */
for(i=0;i<10;i++)
printf("%2d",*(p+i));/*循环输出a[i]的值*/
getch();
}

后者主要是通过移动指针来操作数组的.

main()
{int *p,i,a[10];
p=a;
for(i=0;i<10;i++,p++)
*p=i+1;/*与第一个程序不同的是本程序以p指针的移动来达到给数组赋值的目的*/
for(p=a,i=0;i<10;i++,p++)/*注意for循环的初始条件是p=a,万不可少!*/
printf("%2d",*p);/*循环输出数组元素*/
getch();
}


2006-03-13 18:50
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
得分:0 
谢谢楼上的各位了,我比较同意三楼的说法

2006-03-14 13:00
haishanglang
Rank: 1
等 级:新手上路
帖 子:378
专家分:0
注 册:2006-3-2
收藏
得分:0 
同意三楼的说法

2006-03-14 14:34
快速回复:[求助]关于指针变量的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044506 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved