‘壹’ 怎样获得数组中某一个指定数据所在的位置
怎样获得数组中某一个指定数据所在的位置
main()
{
int i,j,p,q,s,a[10];
printf("\n input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++){
p=i;q=a[i];
for(j=i+1;j<10;j++)
if(q<a[j]) {p=j;q=a[j]; }
if(i!=p)
{s=a[i];
a[i]=a[p];
a[p]=s; }
printf("%d",a[i]);
}
}
本例程序中用了两个并列的for循环语句,在第二个for 语句中又嵌套了一个循环语句。第一个for语句用于输入10个元素的初值。第二个for语句用于排序。本程序的排序采用逐个比较的方法进行。在i次循环时,把第一个元素的下标i赋于p,而把该下标变量值a[i]赋于q。然后进入小循环,从a[i+1]起到最后一个元素止逐个与a[i]作比较,有比a[i]大者则将其下标送p,元素值送q。一次循环结束后,p即为最大元素的下标,q则为该元素值。若此时i≠p,说明p,q值均已不是进入小循环之前所赋之值,则交换a[i]和a[p]之值。 此时a[i]为已排序完毕的元素。输出该值之后转入下一次循环。对i+1以后各个元素排序。
7.2 二维数组的定义和引用
‘贰’ PB中如何得到一个字符串变量的地址
下面是我的测试代码:
在st_1内会写出分配的空间句柄。
st_2内会写出a=255,b=255,c=255
il_menuDataPointer= LocalAlloc(0,6) //分配内存 6=sizeof(menuitemdata)
st_1.text = string(il_menuDataPointer)
is_text.a = 255
is_text.b = 255
is_text.c = 255
iis_text.a = 0
iis_text.b = 0
iis_text.c = 0
//写入数据
CopyMemory(il_menuDataPointer,is_text,6)
//从内存块中取出数据
CopyMemory(iis_text,il_menuDataPointer,6)
st_2.text = "a=" + string(iis_text.a) + ",b=" + string(iis_text.b) + ",c=" + string(iis_text.c)
‘叁’ 如何在c语言中定义一个变量在一个绝对地址
C中的“变量”用标识符表示,叫“变量名”;变量名的管理有一套对编程者透明的机制,所以不能将变量定义在一个程序员主观想象的地方。但指针变量例外,因为指针变量的值是地址值,所以可以将一个具体数值强制为同类型指针再赋给指针变量,如int *p=(int *)1234567;,这就把1234567这个地址值赋给指针变量p了——但这是很危险的操作,不仅不提倡,通常是禁止的,只是语法上合法。
‘肆’ 怎么获得一个指针变量所指向的地址的值
说白了P本身也是个变量,存储的时地址而已,正常用为*p,取得是数据,如果直接用p那就是地址了。可以试试。
‘伍’ 在Delphi 中如何得到一个函数的地址
在DELPHI定义回调函数应该将该函数/过程定义为类或数据类型如
TmyCallBack=function():boolean;stdcall;
定义回调函数
function myCallBack:boolean;
begin
//code.....
end;
在调用时使用如下:
procere MyCallBackSmaple(MyCall:TmyCallBack);
begin
if assigned(MyCall) then//检查MyCall是否为空
MyCall;
end;
‘陆’ Linux中的原子变量如何取地址,如何给定义的原子变量赋指定的地址
首先请确定你要做原子操作的对象是谁?是一个地址,还是地址指向的数据?
如果把数据做为原子对象,直接对数据进行原子操作即可,数据的指针不用做原子操作。
‘柒’ 如何获取数据结构的地址
"获取 @stPS.hDevMode的地址
invoke wsprintf,addr szBuffer,addr szFormatPrt,addr @stPS.hDevMode
用addr @stPS.hDevMode 为什么达不到效果?"
应该是addr的问题,addr要求后面的内容必须在引用前定义,也就是说@stPS.hDevMode 这个局部变量的成员在前面你没有定义。
有两种解决方法:
1.不用addr,用offset。即写为:
push offset szBuffer
push offset szFormatPrt
push offset @stPS.hDevMode
call wsprintf
2.在引用前先定义@stPS.hDevMode
在代码段:
.data?
@stPS.hDevMode dd ?
....
.code
“我还有一个疑问就是 eax 2次被附值 却得到预期效果 ?”
你是说这两句吧?
mov eax,@stPS.hDevMode
mov eax,[eax] ;现在eax是DEVMODE结构的地址
这两句就是取@stPS.hDevMode的地址,就相当于
tmp = @stPS.hDevMode;
tmp = &tmp;
最后eax中是@stPS.hDevMode的地址。
希望对你能有所帮助~~~~~
‘捌’ 数据块中的地址怎么定义
可以再PLC中将需要读取的MD寄存器传送至DB区,然后在组态王中读取DB的地址,设置好数据类型就可以了。数据块是一组按顺序连续排列在一起的几组记录,是主存储器与输入、输出设备或外存储器之间进行传输的一个数据单位。是数据的物理记录,与数据的逻辑记录(逻辑上有联系,在存储器上占有一组邻接单元的数据单位)之间的对应关系有3种方式:①一个块即为一个记录;②一个块包含若干个逻辑记录;③一个逻辑记录占有几个块。数据块的大小可以是固定的或是可变的,块与块之间有间隙。设计数据块大小,受到多方面因素的影响,包括输入、输出效率,存储空间代价以及计算机应用特点等。
‘玖’ 在C语言中如果已经知道了一个数据的内存地址,怎样直接从内存中读取出该数据
要读取内存数据的话,只能通过指针,你只能通过自己定义一个int的指针,让他指向一个内存地址,然后通过*指针的形式读出来。
你说的“我不想通过指针变量来直接输出该int数据的值,而是想直接读取内存的数据,看看和我定义的int数据值是否相同。”是没意义的,就好像你要确定我这个人是不是我这个人一样,如果你一定要写的话,可以写成这样。
#include<stdio.h>
int main()
{
int a=123,b=1234567;
int adda=&a,addb=&b;
int *m,*n;
m=adda;
n=addb;
//printf("*m=%d\t,*n=%d\n",*m,*n); //这里不用指针变量直接输出int数据
printf("m=%d\t,n=%d\n",a,b);
return 0;
}
这里的m和n已经和a,b没有任何逻辑联系了,他们只是表示两个内存段的数据而已。
再明确点可以写成
#include<stdio.h>
int main()
{
int a=123,b=1234567;
int adda=&a,addb=&b;//adda和addb仅仅表示两个内存地址
int contenta,contentb;
contenta=*adda;
contentb=*addb;//这两句的含义是两个内存地址里面的内容,他们和变量a,b没有逻辑关系
//printf("*m=%d\t,*n=%d\n",contenta,contentb); //这里不用指针变量直接输出int数据
printf("m=%d\t,n=%d\n",a,b);
return 0;
}
这里就是你说的比较a以及a所在的内存块(adda)里面内容是不是和a相等
‘拾’ C语言如何获得变量的物理地址以及简单的写
只能获得进程空间的虚拟地址