传值编译
1. hibernate sql 传值问题
传值的方式有很多种,可以换一种啊
用HQL和Criteria都可以很容易的满足这种需求,看你上面写的,也没什么特别的必要用sql-query这种形式啊
2. windows下的gcc编译器如何给主函数传参数
gcc编译器不是传递参数用的,是编译程序代码,输出可执行对象。在windows的shell命令中,第一个参数是可执行文件名,后面的按照顺序对应主函数的参数。
3. 这个C语言程序,求一元二次方程的根,编译时老有未申明变量的错误,但我已经传值了
#include<stdio.h>
#include<math.h>
double x1,x2;
static int delta;
static double t;
void func(int a,int b,int c);
void func_1(double a,int b,int c);
void func_2(double a,int b,int c);
void func_3(double a,int b,int c);
void main()
{
int a,b,c;
printf("请输入一元二次方程的系数:");
scanf("%d%d%d",&a,&b,&c);
printf("则一元二次方程为: %dx^2+%dx+%d=0",a,b,c);
func(a,b,c);
}
void func(int a,int b,int c)
{
t=-b/(2.0*a);
delta=b*b-4*a*c;
if(delta>0)
{
func_1(t,delta,a);
printf("该方程有两个不同实根%f和%f\n",x1,x2);
}
else if(delta==0)
{
func_2(t,delta,a);
printf("该方程有两个相同实根%f\n",x1);
}
else
func_3(t,delta,a);
}
void func_1(double a,int b,int c)
{
x1=t+sqrt(delta)/(2*a);
x2=t-sqrt(delta)/(2*a);
}
void func_2(double a,int b,int c)
{
x1=x2=t;
}
void func_3(double a,int b,int c)
{
double m;
m=sqrt(-delta)/(2*a);
printf("该方程有两个虚根x1=%f+%fi,x2=%f-%fi\n",t,m,t,m);
}
4. C++传值调用的问题
这是传值调用, 意思就是 形参 的 改变不会影响 实参的值。
你运行一下可知 主函数调用了swap函数后 a,b的值并没有发生交换。
原因是,调用swap函数时 编译器为 swap(int a,int b) 中的形参 a , b单独分配内存空间,并接受主函数传递来的值,这块内存空间和 main()函数中的 a ,b 不是同一内存空间。 所以在swap(int a,int b) 中 a , b发生了交换,但main函数中a , b没发生交换。即 参数仅在调用时由实参向形参传递,而不可由形参向实参传递 。
要使a ,b发生交换 需要使用传址调用。程序改为如下:
#include<iostream>
using namespace std;
void swap(int & a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
cout<<"in ‘swap’:a="<<a<<",b="<<b<<endl;
}
main()
{
int a=3,b=5;
cout<< "before ‘swap’:a="<<a<<",b="<<b<<endl;
swap(a,b);
cout<<"after ‘swap’:a="<<a<<",b="<<b<<endl;
}
使用 引用 时 ,对于void swap(int a,int b) 编译器并没有给形参a,b分配新的内存空间,只是使 形参a,b指向了main函数中实参a,b的内存空间,他们共享同一内空间,即把地址给了形参。所以在void swap(int a,int b)函数中对这块内存的改变也就改变了实参的值。
除了使用引用,也可以使用指针,指针方式和引用方式都属于传址调用。
5. Spring jdbcTemplate 查询语句预处理传值
JdbcTemplatetemplate=newJdbcTemplate(JdbcUtils.getDatasource());Stringsql="select*fromuser";Listlist=template.queryForList(sql,User.class);
6. linux编译的main函数的参数是怎么传值进来
方法1.
C/C++语言中的main函数,经常带有参数argc,argv,如下:
int main(int argc, char** argv)
int main(int argc, char* argv[])
这两个参数的作用是什么呢?argc 是指命令行输入参数的个数,argv存储了所有的命令行参数。假如你的程序是hello.exe,如果在命令行运行该程序,(首先应该在命令行下用 cd 命令进入到 hello.exe 文件所在目录) 运行命令为:
hello.exe Shiqi Yu
那么,argc的值是 3,argv[0]是"hello.exe",argv[1]是"Shiqi",argv[2]是"Yu"。
下面的程序演示argc和argv的使用:
7. 解释下 传值方式 和 传址方式
问str为什么没有变。然后将void GetMemory改成:
void GetMemory(char **p, int num)
{
*p=(char *)malloc(sizeof(char) * num);
}
str就变了。
问这是为什么?先来看看什么是传值,什么是传址。
传值方式:向函数传递参数时,先复制一份参数,然后才将复制品传给参数。函数中所有对参数的操作,就只是在使用复制品。不会对改变传递前的参数本身。
传址方式:将地址传送给函数,函数对该地址的内容操作,相当于对实参本身的操作。
在一个程序运行时,程序会专门为参数开辟一个内存空间,称为“栈”。栈所在内存空间位于内存的低地址区。当程序需要传递参数时,将一个个参数“压入”栈区内存的底部,然后,函数再从栈区一个个读出参数。
如果一个函数需要返回值,那么调用者首先需要在栈区留出一个大小正好可以存储返回值的内存空间,然后再执行参数的入栈操作。大都数编译器采用“从右到左的次序”将参数一个个压入。因此先将b压栈,再将a压栈。以下面这个程序为例。
//skk_Argument Passing.cpp
#include <iostream>
using namespace std;
int f(int a, int& b)
{
a++;
b++;
return 1;
}
int main()
{
int a=4;
int b=7;
int c(0);
c=f(a,b);
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
参数a是传值,参数b是传址。
很容易看出最后的结果是:
4 8 1
还有一种形式:
void swap (int *a, int *b);
我不太赞成用这种形式(虽然很多时候很有用),最好用
void swap (int &a, int &b);
这是因为使用前一种形式容易出现问题,例如在skk_Argument Passing.cpp加入以下这2个程序段:
void swap1(int *a, int *b)
{
int i;
i=*a;
*a=*b;
*b=i;
}
void swap2(int *a, int *b)
{
int *i;
i=a;
a=b;
b=i;
}
swap1可以起到交换a,b的作用。swap2就不行了。因为本质上来说它们仍然是值传递,只不过这个值是地址,它们都不能改变自己参数本身(指针a和指针b)。swap2完全是一个传值调用。swap1虽然不能改变参数,但是指针太危险了,它间接改变了指针指向int 。因此在这种情况下,我们声明成:
void swap3 (int &a, int &b);
这就告诉该函数有可能改变传递来的变量的值。但是最好在调用的时候在后面注释,因为调用的时候是看不出的,例如调用swap1的时候为swap1 (&a,&b)可以很好给读程序的人提示信息,告诉我们参数可能被修改。调用swap3的时候就是swap3(a,b),无法给出信息,所以最好给注释。即便这样,我仍然偏爱swap3的写法。不过对非const引用参数是不允许做类型转换的,如果可以,那么这样做会毫无意义。因为类型转换的时候需要临时变量
8. 参数传递的几种方式 编译原理
由于web系统采用http协议在浏览器和服务器之间传输数据,而http协议是一种无状态的协议,如何在不同页面之间传递数据,可以有一下几种方式
方式一:表单方式传递
表单传递参数是一种最简单,也是最基本的参数传递方式。注意:表单元素隐藏按钮的使用
方式二:带参数的url方式传递
带参数的url写法: url?参数名1=值1&参数名2=值2。
方式三:请求request对象
可以将数据绑定到request对象上,通过request对象getAttribute和setAttribute方法读写
方式四:用户会话session对象
可以将数据绑定到session对象上,通过session对象getAttribute和setAttribute方法读写
方式五:application对象
可以将数据绑定到application对象上,通过application对象getAttibute方法和setAttribute方法读写
方式六:cookie对象
可以将数据写到到客户端浏览器cookie文件中。
其中方式一,方式二只能实现字符串参数的传递,方式三,四,五,六可以实现对象的传递(方式六需要对象序列化后进行存储)
方式一,方式二,方式三数据传递只能请求页面获取数据,而方式四,五,六可以在多个不同页面获取数据对象
方式四和六保存的数据对象都是和某个用户相关的信息,不同的是方式四将数据保存到服务器内存中,方式六将数据保存到客户端内存中。
方式五保存的数据对象都是和所有用户相关的信息,数据也是保存到服务器内存中。
9. 编译原理传地址问题
传址的话,这么讲你应该更明白,因为y(A):=x+y(1),y(1)=x+y(2),这时的y(2)才等于A,所以y:=x+x+y
