modify函数,请教一下pb中modify函数的用法,谢谢!
modify函数,请教一下pb中modify函数的用法,谢谢!详细介绍
本文目录一览: C语言.定义一个函数实现交换两个整数的功能,(用指针做函数参数)。
C语言.定义一个函数实现交换两个整数的功能,(用指针做函数参数)。 #include
void swap(int *p,int *q)
{ int t;
t=*p; *p=*q; *q=t;
}
main()
{ int a=5,b=4,*p,*q;
p=&a; q=&b;
swap(p,q);
printf("a=%d b=%d",a,b);
return 0;
}
..
C语言 指针做函数参数 的优点
首先你要认识函数传参是怎么进行的
函数传参是复制形的,举个例子说:
void modify(int a)
{
a++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
这个程序的答案还是5。为什么?
因为当调用modify(a)时,在执行modify函数时,是另外开辟了一个内存空间,将main中a的值复制过来,modify函数中所有的操作都是相对于这个新开辟的内存空间而言的,对原来的a没有任何改变。
现在就来说说指针,如果用指针传参的话那就完全不一样了,指针(pointer),说白了即是指向变量内存地址。同样上面的例子:
void modify(int * a)
{
(*a)++;
}
void main()
{
int a=5;
modify(&a);
printf("%d",a);
}
这个答案当然是6
因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个新开辟的内存空间,只是这个内存空间初始值和a一样。
现在来说说传参,其实你“为什么函数参数是字符串的多用指针?” 那句我不是很明白,C中的字符串传参好像就指针一种形式(除非用结构体)。
何时用指针,何时用拷贝。当传的参数是一个结构体,而这个结构体比较大,这时最好用指针,因为如果用拷贝的话,单单花在拷贝的时间就要浪费很多,而如果这个函数经常被调用,那么这效率问题就出现了。
你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return 如果不是用指针的话,就要再子函数的未尾加上一条return x;把这个数返回当返回值。
多看点书,多写点程序,刚开始学都会对指针比较迷茫。写多了,自然而然就懂了。
c语言中如果函数的参数不用指针而用整数能否实现值交换?
不能
解释:
1.就像是 你复印了一份文件, 对复印的文档进行修改 那么你的原文档上面能有改动吗?
C语言; 编写一个函数,用指针方法实现功能
int find(char* source/*源串*/, char* target/*子串*/)找到返回在源串中的位置,未找到返回-1,如果要改为找到返回1,把return i改为return 1;{ int i,j; int s_len=strlen(source); int t_len=strlen(target); if(t_len>s_len) { return -1; } for(i=0;i<=s_len-t_len;i++) { j=0; int flag=1; if(source[i]==target[j]) { int k,p=i; for(k=0;k
<t_len;k++) { if(source[p]="=target[j])" p++; j++; continue; } else flag="0;" break; if(flag="=1)" return i; -1;}
C语言,用指向函数指针的知识实现两个函数求和的功能
两个函数求和?是两个数求和的函数吧!
int add(int a, int b){ return a+ b;}
int main()
{
int sum;
int (*fn)(int , int );
fn = add;
sum = fn(3,5);
}
利用指针作函数参数,设计一函数实现将n个元素进行排序
将这n个元素存在数组里,然后用指针类型参数接收即作为形参,然后采用排序算法对这些元素进行排序即可
C语言,编写一函数,其功能是求一个长整数各位数字之和。要求使用指针函数实现
其功能是求一个长整数各位数字之和:
int function(long l){
int sum = 0;
String s = l+"";把长整数转成字符串
for(int i=0;i
<s.length();i++){
sum +=Integer.ValueOf(s.charAt(i));
}
return sum;
}
c程序,使用指针作为函数参数,编写函数实现两个字符串连接
char *mycat(char *a,const char *b){ char *t; if(!a || !b) return NULL; t=a; while(*a) a++; while(*a++=*b++); return t;}
编一个函数sort,使10个整数按升序排列,在main函数中输入这10个数,并输出排好序的数,函数参数用指针实现
#include
void sort(int *a,int n)
{
int i,j,temp;
for(j=0;j
<n;j++)
for (i=0;i
<n-j-1;i++)
if (a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
void main()
{
int i,j,temp;
int a[10];
for(i=0;i<10;i++)
scanf ("%d,",&a[i]);
sort(a,10);
for(i=0;i<10;i++)
printf("%d ",a[i] );
printf("\n");
}
c语言编程:用指针变量作函数参数求三个数和
#include "stdafx.h"#include "process.h"double getsum(double *a, double *b, double *c);声明函数 参数为double类型的指针int main(int argc,char* argv[]){double *sum=new double;*sum = 0;double x = 1.33332;double y = 2.1;double z = 6.4;*sum=getsum(&x, &y, &z);用变量地址做参数调用函数printf("%g\n",*sum);delete sum;释放空间sum = NULL;system("pause");return 0;}double getsum(double *a, double *b, double *c){ return (*a +*b+ *c );}
</n-j-1;i++)
</n;j++)
</s.length();i++){
请教一下pb中modify函数的用法,谢谢!
modify("t_1.text='"+'中国'+"'")
modify函数用法看起来很简单,括号里直接写具体要做的修改就行了,点new,在tool选项卡里选择datawindow syntax里面会有关于modify和Describe的具体语句。
外汇ea 测试结果类型中的 modify 什么意思
这个是指令函数,通常用来修改仓单的止损 止盈位置,常用的跟踪止损,多仓位持仓的情况下 修改平均持仓价后的止盈位,都是通过这个指令函数来实现的;比如
if(TrailingStop>0)
{
OrderSelect(12345,SELECT_BY_TICKET);
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()
<bid-point*trailingstop)
{
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue);
if(!res)
Print("Error in OrderModify. Error code=",GetLastError());
else
Print("Order modified successfully.");
}
}
}
就是这个函数执行的追踪止损。
</bid-point*trailingstop)
c语言中,定义modify(修改)函数,出现的问题,这是其中一段:
请注意变量 m
也就是记录总数为 m
在查不到时,循环结束时,i==m,后面的信息都存在 stu[m]中,这样就有了 m+1条了
在存到文件中时,还是只保存了 m 条,所以,增加的一条并没有保存到文件中
C语言 指针做函数参数 的优点
指针说白了就是地址,内存变量的地址。
指针作参数说不上有什么优点。就是当你在子函数中要对你的主调用函数中变量进行操作时就必须用到指针做参数,也就是把主调用函数中变量的地址传到被调用函数中去,这样才能实现对主调函数变量的操作。如果不是用指针变量,而是一个普通变量的话是无法传递主函数的变量地址的,这里涉及到函数的传值和传址的区别。如果不了解这个最好找个书看看,一定要仔细理解。
对于你的“为什么函数参数是字符串的多用指针?”这句话我不是太理解。
至于何时该用指针何时不该用,我上面已经说清楚了。如果你是C语言的初学者可能会不太理解,那么你就仔细去研究一下教材吧。
优点:
1.允许用户可以直接操作内存(可以在函数内部修改变量值)
2.传递参数的效率更高(尤其是像数组、大型结构体、链表这样的数据结构),因为普通的参数传递是为参数制造一个副本,这会产生不容忽视的内存开销,而且制造一个副本也会占用不少的CPU时间
3.许多数据结构的实现都必须靠指针来实现(比如链表)
第一,可以用指针修改指针指向的变量,否则只改变此变量的拷贝
第二,利用指针的指针增加安全性
“字符串的多用指针”是指char *argv[]吧
1,回调函数,例如signal(int,sighandler_t)
动态改变调用
void sort(void* beg,void*end,bool(*compare)(viod *a,void*b) );
2字符串数组当参数会自动变成指针
int foo(char a[]);
int foo(const char* a);一样
我的感觉就是高效!
首先你要认识函数传参是怎么进行的
函数传参是复制形的,举个例子说:
void modify(int a)
{
a++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
这个程序的答案还是5。为什么?
因为当调用modify(a)时,在执行modify函数时,是另外开辟了一个内存空间,将main中a的值复制过来,modify函数中所有的操作都是相对于这个新开辟的内存空间而言的,对原来的a没有任何改变。
现在就来说说指针,如果用指针传参的话那就完全不一样了,指针(pointer),说白了即是指向变量内存地址。同样上面的例子:
void modify(int * a)
{
(*a)++;
}
void main()
{
int a=5;
modify(&a);
printf("%d",a);
}
这个答案当然是6
因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个新开辟的内存空间,只是这个内存空间初始值和a一样。
现在来说说传参,其实你“为什么函数参数是字符串的多用指针?” 那句我不是很明白,C中的字符串传参好像就指针一种形式(除非用结构体)。
何时用指针,何时用拷贝。当传的参数是一个结构体,而这个结构体比较大,这时最好用指针,因为如果用拷贝的话,单单花在拷贝的时间就要浪费很多,而如果这个函数经常被调用,那么这效率问题就出现了。
你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return 如果不是用指针的话,就要再子函数的未尾加上一条return x;把这个数返回当返回值。
多看点书,多写点程序,刚开始学都会对指针比较迷茫。写多了,自然而然就懂了。
c语言中的modify是什么意思
修改的意思
你是不是遇到了一个函数叫 modify() 啊?
表示这个函数能修改什么东西......
PB中modify的用法
dwcontrol.modify(modstring)的用法
用modstring参数表示中的规则修改dwcontrol参数制定的数据窗口的定义,用modify可以代替setSQLselect修改where子句,modify只效验语法一次,且不改变,DataWindow的修改状态;而SetSQLselect效验语法两次,并影响修改状态。删除列时,列名前面必须有关键字column(例如,''DESTROY column name").若节省了column,列中的数据不会被修改;只有DataWindow对象中的列会被修改。
数据结构中Modifylist(&L,int i,const elemtype &item);
按照语义来解释,这个函数的功能是修改链表的意思
然后看它三个参数,可以猜想这个函数的功能是在L链表中,修改第i个元素的数据
&L,取链表首地址,通过指针不断指向next指针来找到第i个元素
const elemtype &item,表示修改第i个元素的数值,因为是函数传递修改,所以必须用到地址才能改变链表中第i个元素的值,所以使用&取地址运算,链表中的elemtype 表示元素的类型,比如说int型,char型,那elemtype 就分别表示int,char
PB动态报表的实现
实现原理
PowerBuilder中有一种以PSR为后缀的特殊的保存报表的文件格式(本文简称PSR文件) 数据窗口可以直接读取PSR文件生成报表 而程序通过生成PSR文件 就可以实现动态报表格式的保存
首先 通过设置数据窗口对象(dataobject)中的文本 列等的Resizeable和moveable属性为 来实现对象位置的拖动控制 通过数据窗口的Modify函数实现对象值的更改(包括增加和删除)
其次要保存报表格式 在一个应用中 数据窗口对象的名称总是惟一的 将每一个数据窗口对象转化成PSR文件存于数据库表中 在窗口打开时 程序先校验报表格式是否存在 如果存在 将报表格式读出来放在一个临时文件当中 然后设置数据窗口(datawindow)的数据对象(dataobject)为这个报表文件 并提取数据 如果不存在 直接提取数据即可
实现过程
建立一个数据库表用以保存报表格式文件
建立一个窗口w_temp 定义实例变量如下
string is_dwtype is_dwobject
//保存报表中对象的类型及名称
在窗口的Open事件中加入如下代码 校验报表格式是否存在 如果存在 读取定义好的报表格式到数据窗口
blob emp_pic
long ll_handle
string ls_dwobject ls_reportfile ls_path
ls_dwobject = dw_print dataobject
//判断是否存在该数据窗口的报表格式
select count(*) into:ll_count from dyn_report where dwobject =:ls_dwobject;
if ll_count> then
//读取报表格式文件到大文本变量
selectblob memo into:emp_pic from dyn_report where dwobject =:ls_dwobject;
//创建PSR临时文件并保存到硬盘
ls_reportfile = \temp psr
ll_handle = FileOpen(is_reportfile StreamMode! write! LockWrite! Replace!)
FileWrite(ll_handle emp_pic)
FileClose(ll_handle)
dw_print dataobject = ls_reportfile
dw_print settransobject(sqlca)
else
Dw_print settransobject(sqlca)
End if
Dw_print retrieve()
保存报表格式 这可以通过Cb_savereport按钮的clicked事件实现
string ls_filename
long ll_count
blob Emp_id_pic
ls_filename = temp psr
//保存报表格式到硬盘临时文件
dw_print saveas(ls_filename PSReport! false)
sqlca automit = true
select count(*) into :ll_count from dyn_report where dwobject =:is_dwobject;
if ll_count = then
insert into dyn_report(dwobject rptitle)
values( is_dwobject :ls_filename :ls_path)
end if
//从硬盘临时文件读取数据保存到数据库表中
emp_id_pic = of_readbmpfile(ls_filename)
//该函数将二进制文件内容读到大文本对象中
UPDATEBLOB dyn_report SET memo = :Emp_id_pic where dwobject = :is_dwobject;
//更新数据库
sqlca automit = false
动态报表的实现 通过数据窗口dw_print的clicked事件捕获数据窗口中的对象 并将对象名存放在实例变量is_dwobject中 为下一步修改报表做准备
string ls_type ls_dwoname
//得到对象类型和名称
ls_type = trim(upper(dwo type))
ls_dwoname = trim(dwo name)
is_dwtype = ls_type
choose case ls_type
case TEXT CommandButton GROUPBOX
is_dwobject = ls_dwoname
//设置为可以拖动和改变大小
this modify(ls_dwoname+ Resizeable= + )
this modify(ls_dwoname+ moveable= + )
case LINE
//直线对象不能通过设置Resizeable和moveable属性进行调整 必须通过其他途径
is_dwobject = ls_dwoname
case RECTANGLE ELLIPSE GRAPH BITMAP
is_dwobject = ls_dwoname
this modify(ls_dwoname+ Resizeable= + )
this modify(ls_dwoname+ moveable= + )
case COLUMN PUTE
is_dwobject = ls_dwoname
this modify(ls_dwoname+ Resizeable= + )
this modify(ls_dwoname+ moveable= + )
end choose
最后再通过modify()函数就可以实现基本的动态报表操作 这一类的文章较多 PB中也有大量的例子可直接使用 在此不再赘述
在cb_exit按钮的clicked()事件中加入 close(parent)
在应用的open事件中加入 open(w_temp) 然后保存并运行 全部工作到此结束!
本程序在PB Oracle 下调试通过
编辑推荐
ASP NET开发培训视频教程
lishixinzhi/Article/program/PB/201311/24637
pb describe,modify等函数中“#”代表什么意思
不要只看#号,是#号加上一个整型数字,这个代表数据窗口的字段名字。按照顺序来的。
PB提供5种数据源:Quick Select(快速选择类型)、SQL Select(SQL选择类型)、Query(查询类型)、External(外部类型)和Stored Procedure(存储过程类型)
----------
Quick Select
只能从一个数据表或者视图中选取数据(无关联的表或者视图)??
----------
SQL Select
1、选择表
可以一次选择多个表
2、选择字段
Select All //选择所有字段
Select Tables //重新选择表
Convert to Syntax //进入SQL语法状态
Compute //计算字段,右键->Columns //选择字段
右键->Functions //选择函数
3、指定检索条件
Retrieval Arguments //定义检索参数变量的类型和名称
where //检索条件,右键->Columns //选择字段
右键->Functions //选择函数
右键->Arguments //选择参数
右键->Value //选择值
右键->Select //从其他表中选择
----------
Query
PB可以将特定的SQL语句保存为Query对象,不同的Query数据源的数据窗口都可以使用这些已经保存好的SQL语句来提取数据
----------
External
当和不存在于数据库中的数据打交道或者要利用数据窗口的某些特性但不进行数据处理时,使用此数据源。无SQL语句。
----------
不要只看#号,是#号加上一个整型数字,这个代表数据窗口的字段名字。按照顺序来的。
integer(dw_1.Object.DataWindow.Column.Count),这个得到数据窗口所有的字段数量。
从数量1开始到最后一个分别对应着每一个数据窗口的字段,而前边加上#号,就是这个字段了。
比如这句:dw_1.Describe('#' + String(li_index) + '.y')),得到你编号是li_index的字段的纵坐标y值,describe函数返回的都是字符型,所以前边加了一个integer转成数字。
下边的modify,也是一样的意思。