奇怪的 C 问题(SCO UNIX下)

时间:2021-02-22 22:07:41
#include <stdio.h>
#include <curses.h>

main()
{
int x=1,y=5;
initscr();
move(20,20);
getyx(stdscr,y,x);                        (1)
printw("now location is %d,%d",x,y);      (2)
refresh();
endwin();
}

在(1)句用的是值传递,但(2)句时x,y的值都变成了20。
请问有谁能指教getyx这个函数是如何改变x,y的值的?!

14 个解决方案

#1


这么奇怪?关注!!!!!

#2


可能的情况是:
#define getyx(window *scr,int y,int x) y=gety(scr),x=getx(scr)
我不知道你用的什么编译器,瞎猜的。

#3


哈哈,老兄真会想办法^_^

#4


有getyx()这样的函数吗?估计被你猜对了。
函数名: getx 
功  能: 返回当前图形位置的x坐标 
用  法: int far getx(void); 
而且当前的图形位置的坐标为(20,20),这就对了嘛! 

#5


你是如何执行的,我怎么不可以?报告:undefined                       first referenced
 symbol                             in file
initscr32                           new.o
stdscr                              new.o
wmove                               new.o
getcury                             new.o
getcurx                             new.o
printw                              new.o
wrefresh                            new.o
endwin                              new.o
i386ld fatal: Symbol referencing errors. No output written to a.out
(SCO UNIX 5.5)

#6


#include <stdio.h>
#include <curses.h>

main()
{
int x=1,y=5;                              (1)
initscr();
move(20,20);                              (2)
getyx(stdscr,y,x);                        (3)
printw("now location is %d,%d",x,y);      (4)
refresh();
endwin();
}

看样你对move(),getyx()不待了解(1)中虽定义x,y的值,但是move()函数江光标的位置移到了(20,20)这点上,所以当你用getyx()时x,y的值就变了.

NAME
getyx - get cursor coordinates 
 SYNOPSIS


#include <curses.h>

void getyx(WINDOW *win, int y, int x);


 NAME
move, wmove - window cursor location functions 
 SYNOPSIS


#include <curses.h>

int move(int y, int x);

int wmove(WINDOW *win, int y, int x);


 DESCRIPTION
The move() and wmove() functions move the cursor associated with the current or specified window to (y, x) relative to the window's origin. This function does not move the terminal's cursor until the next refresh operation. 
 RETURN VALUE
Upon successful completion, these functions return OK. Otherwise, they return ERR. 
 ERRORS
No errors are defined. 

#7


又学到东西了

#8


变色鱼,你好请这样编译:
cc ... -lcurses

#9


jackeyjia:
我想知道的是内部机制,即getyx这个函数是如何将x,y的值改变的?
按理,以值传递的参数在函数内部是不能改变值的,正常的应该是传地址。
请指教!

#10


我支持jackeyjia() 的说法

#11


不是传值,是赋值

#12


getyx(win,y,x)  得到目前光标的位置
                       (请注意! 是 y,x 而不是 &y,&x )

#13


getyx(win,y,x)  得到目前光标的位置
                       (请注意! 是 y,x 而不是 &y,&x )

#14


赵云:
你说对了,谢谢!
原型是:
#define getyx(win,y,x)          ((y) = getcury(win), (x) = getcurx(win))

#1


这么奇怪?关注!!!!!

#2


可能的情况是:
#define getyx(window *scr,int y,int x) y=gety(scr),x=getx(scr)
我不知道你用的什么编译器,瞎猜的。

#3


哈哈,老兄真会想办法^_^

#4


有getyx()这样的函数吗?估计被你猜对了。
函数名: getx 
功  能: 返回当前图形位置的x坐标 
用  法: int far getx(void); 
而且当前的图形位置的坐标为(20,20),这就对了嘛! 

#5


你是如何执行的,我怎么不可以?报告:undefined                       first referenced
 symbol                             in file
initscr32                           new.o
stdscr                              new.o
wmove                               new.o
getcury                             new.o
getcurx                             new.o
printw                              new.o
wrefresh                            new.o
endwin                              new.o
i386ld fatal: Symbol referencing errors. No output written to a.out
(SCO UNIX 5.5)

#6


#include <stdio.h>
#include <curses.h>

main()
{
int x=1,y=5;                              (1)
initscr();
move(20,20);                              (2)
getyx(stdscr,y,x);                        (3)
printw("now location is %d,%d",x,y);      (4)
refresh();
endwin();
}

看样你对move(),getyx()不待了解(1)中虽定义x,y的值,但是move()函数江光标的位置移到了(20,20)这点上,所以当你用getyx()时x,y的值就变了.

NAME
getyx - get cursor coordinates 
 SYNOPSIS


#include <curses.h>

void getyx(WINDOW *win, int y, int x);


 NAME
move, wmove - window cursor location functions 
 SYNOPSIS


#include <curses.h>

int move(int y, int x);

int wmove(WINDOW *win, int y, int x);


 DESCRIPTION
The move() and wmove() functions move the cursor associated with the current or specified window to (y, x) relative to the window's origin. This function does not move the terminal's cursor until the next refresh operation. 
 RETURN VALUE
Upon successful completion, these functions return OK. Otherwise, they return ERR. 
 ERRORS
No errors are defined. 

#7


又学到东西了

#8


变色鱼,你好请这样编译:
cc ... -lcurses

#9


jackeyjia:
我想知道的是内部机制,即getyx这个函数是如何将x,y的值改变的?
按理,以值传递的参数在函数内部是不能改变值的,正常的应该是传地址。
请指教!

#10


我支持jackeyjia() 的说法

#11


不是传值,是赋值

#12


getyx(win,y,x)  得到目前光标的位置
                       (请注意! 是 y,x 而不是 &y,&x )

#13


getyx(win,y,x)  得到目前光标的位置
                       (请注意! 是 y,x 而不是 &y,&x )

#14


赵云:
你说对了,谢谢!
原型是:
#define getyx(win,y,x)          ((y) = getcury(win), (x) = getcurx(win))