- 陶小凡
-
这是一个运算顺序的问题。注意括号的运用。
(1) ++(*pointer)是先取值,再自增,当前pointer指向的是位置arr[3],取值后是2,*pointer的结果是2,2再自增,当然会得出3。
值得说明的是,这个括号是可以省略的,此处括号只起到增加程序可读性的作用。
(2)*(pointer-2)是先移动指针,再取值。pointer-2是把指针从当前位置arr[3]回退两个位置,指向了arr[1],再取值,也就是取出的元素6。
当然,这个括号是不可省略的。
还有不明白之处,请留言。
- FinCloud
-
*pointer是指针指向的一个值,此时为2,这个值再自加1自然为3。
pointer此时还指向值2,减2的含义是指针回退两个元素,自然指向了值6。
指针本身有值,表示它指向的地址,这个值可以运算,表示对地址的修改。而指针指向的值,其实就是位于这个地址所存的值。
在汇编以上层次的编程中,内存实际上理解为地址和值就够了,比如说指针值为100,就相当于地址100(这实际上是一个基于基址的偏移),而说指针指向200时,实质是说位于地址100的内存存储了200这个值。
再推广到函数的参数,书上所谓的形参,变参什么的除了混淆是非,没用,只要记好何时传地址,或传值,就不会有什么问题。
在内存中是找不到指针这种有形的东西的,如果我们把内存中某个位置存放的一个数值看成指针,那这个值就是某个值所在的地址。到这个地址去找,才能知道某个值的大小。到了下一个程序运行的时候,这个位置存放的值的含义可能又变了。因此,学语法是一个长期的过程,要能理解到为什么这样是合理的,才算真正出师了
- 苏萦
-
注意*pointer++和*(pointer++),运行结果是一样的,都是先取pointer的地址,再++。
pointer初始指向arr[3],值2。
执行printf("%d ",*pointer);pointer指向arr[3],先打印pointer指向值2,打印后pointer指向arr[3]。
执行printf("%d ",*pointer++);pointer指向arr[3],先打印pointer指向值2,打印后pointer++指向arr[4]。
执行printf("%d ",*(pointer++));pointer指向arr[4],再打印pointer指向值5,打印后pointer++指向arr[5]。
执行printf("%d ",*--pointer);先执行--,指向arr[4],再打印pointer指向值5,打印后pointer指向arr[4]。
执行printf("%d ",*(--pointer));先执行--,指向arr[3],再打印pointer指向值2,打印后pointer指向arr[3]。
执行printf("%d ",++(*pointer));先取指向地址arr[3]的值2,将arr[3]的值++,打印3,打印后pointer指向arr[3]。
执行printf("%d ",*(pointer-2));先执行-2,指向arr[1],再打印pointer指向值6,打印后pointer指向arr[1]。
执行printf("%d ",*(arr+3));arr+3就是arr[3],打印3(arr[3]在倒数第三条已自增)。
- 马老四
-
第一个,pointer下标地址为3内容为2,自加符号在前,是先加完再执行,2+1等于3
第二pointer下标地址为3,3-2等于1,下标地址为1的内容是6。
我自学c语言,这是我的理解。
- 小教板
-
指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在计算机存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
作个比喻,假设将计算机存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,这就是指针的作用。
- cloudcone
-
文化太底不会
- 牛云
-
点头像,,
pointer;是什么意思
pointer英 [u02c8pu0254u026antu0259(r)] 美 [u02c8pu0254u026antu025a] n. 教鞭;建议;线索;(测量仪器上的)指针2023-07-26 16:37:462
C语言指针问题,我这样想利用pointpointer改变pointer,使pointer指向整形变量number2,可是最终运行不对
*pointpointer = &number2;这样就对了2023-07-26 16:37:541
指针(pointer)有什麼用???
指针=内存门牌号找变量只要找对门牌号就找到了2023-07-26 16:38:013
C++请高手帮忙注释或讲解其中s t lastpointer pointer 这几个参数的意义和作用
这段代码的主要功能就是使用队列来格式化输出二叉树,队列的特点就是先进先出,因此该方法的基本思想史,首先把树的根结点放入队列,判断队列是否为空,如果不为空,输出队列头结点的值,判断该结点是否有左右结点,如果有,把它们送入队列中,然后使队列头结点出队;如果为空,表示树中所有结点的值已全部输出。s:指出该结点在书中的深度,根结点深度为1,下一层结点为2,以此类推,程序里面h也是用来记录上一个从队列中出来的结点的深度t:举个例子来说,对于深度为3满二叉树,最底层的叶子结点的数目是4个,则从左往右编号1-2-3-4,t就是这些编号,如果该结点是左结点,该t值等于其父亲结点的t值乘上2再减去1,如果是右结点,则只是父亲结点的t值乘上2,这就是代码后面输出oper后为什么这样给t赋值。lastpointer :该指针指向上一个从队列aQueue中出来的头结点pointer :该指针指向队列aQueue中的头结点中间if...else if..else中的意思就是在输出oper之前,在oper的值前面要输出多少个空格,使结果呈现树的那种形态2023-07-26 16:38:231
int *pointer;那么 (pointer)++与pointer++有什么区别?
(pointer)++与pointer++基本没差别1、&*pointer 由右向左结合,取pointer指针的值,再取这个值的地址,相当于取a的地址2、*&a 由右向左结合,取a的地址,再取这个地址的值,相当于取a的值纯粹文字游戏,无必要不要这样写程序2023-07-26 16:38:301
c++ pointer 与指针有关的问题
因为这个你返回的指针所指向的内容 在函数调用完毕时就是一个不确定的值了,因为数组时局部的,函数调用完毕的时候会自动销毁的,虽然有个地址,但是地址所指向的内容是不对的,好好想想 ,呵呵,希望我的回答能够帮到你。2023-07-26 16:38:393
C++的pointer问题?
第一个是指针,接收指针类型的实参,第二个是引用,接收整型实参2023-07-26 16:38:473
C语言中两个指针变量(pointer_1)++和pointer_1++的区别?
++应该和*(作为指针取值时)优先级相同吧,只是这一级运算符按照 自右向左 结合规则,导致++比*优先处理。有点儿吹毛求疵,但感觉这样好像更严谨一些。2023-07-26 16:38:575
c语言 pointer 完全一团浆糊…
int *p=&x;p是地址,而*p可以来理解为解引用,就是值。对于char* p的那个,其实是编译器搞的鬼!*p为首字母,而输出p的时候,编译器会自动寻址到‘"处!char p[]:数组么!存的类型为char,单个字符char* p[]:指针数组!存的类型为char*,可以为字符串同一时间答题,为什么他最快回答?无奈没抢到最快,就再说一些有用没用的废话吧!如果你只是问C而不是C++那么你不会涉及到string,string是一个泛型类(stl其中之一),string的处理方式并没有尾部追加‘"。追加""是C语言的。至于char* p,p其实就是地址。上面说了编译器搞的鬼。因为你输出用的是“%s”。对于寻址:int *p,他拿到的就是个int,4字节。无可厚非。所以int* p指向int类型的变量。而char* p寻址也如其表示一样。就是按照char类型寻址,1字节,但是他最终会寻址到""处,来告诉编译器,你不能向下寻址了!2023-07-26 16:39:162
一 :c语言中*pointer()和(*pinter)()有区别吗? 请详细说明。
肯定有的2023-07-26 16:39:363
c语言,关于pointer的问题,求解,THX
char *c,*d; c = s;//指向s的首元素地址 d = &s[3];//指向s[3]的地址2023-07-26 16:39:446
变量都可以简写吗,如:pointer简写为:“p”
变量是自己定义的,想怎么写就怎么写2023-07-26 16:39:584
关于c语言pointer的一个问题 ++30
#include<iostream.h>int point_Sum(int *arrayName,int arraylength);main(){ int result = 0; int array[5] = {1,3,5,7,9}; result = point_Sum(array,5); printf("数组array的所有元素的和 是:%d ",result);}int point_Sum(int* arrayName, int arraylength){ int * ptrArray = arrayName; int sum = 0; for(i=0;i<arraylength;i++){ sum += *ptrArray ; ptrArray ++; } return sum; }2023-07-26 16:40:062
(在线等)请问C语言中* pointer_i与* i_pointer有什么区别
你好!int*pointer=3;合法?我都编译不能通过!!!如有疑问,请追问。2023-07-26 16:40:163
1.定义2个浮点型变量 2.定义2个指针变量a_pointer,b_pointer,使这2个指针变量分别指向a,b 3.用printf函数输
.....2023-07-26 16:40:264
C语言,指针的指向*pointer_1=a;是否等价于pointer_1=&a;
这样写:int *p1 = NULL;int *p2 = NULL;int *p3 = NULL;初始化下指针。2023-07-26 16:40:372
c++ pointer问题
*号是解引用符号。*p 表示获得 p指针指向的对象的引用例如p=&firstvalue的话,你把 *p当成就是firstvalue 就能明白拉!而至于p2 = &secondvalue;p1=p2;可以当作就是p1=&secondvalue;2023-07-26 16:41:122
c++里面 pointer+k 和 *(pointer+k)的区别是什麼呀
设 p 是指针,则 p+k 表示指针向后移动 k 个单元,每个单元的大小是 p 指向的类型的 sizeof 大小,所以 p+k 的结果仍然是个指针。而 *(p+k) 是得到 p+k 这个指针位置上存储的数据类型的值。2023-07-26 16:41:202
c++pointer和*p一样吗
一样2023-07-26 16:41:502
pointerpointer有多少个图片
有大量的图片,因为这里面的图片是会动态更新增加的。2023-07-26 16:41:571
如何实现pointer类型的数据写到数组中
可以,是引用private void myfunc(List<Point> yourlist){yourlist.Add(new Point(123, 456));}private void button1_Click(object sender, EventArgs e){List<Point> mylist = new List<Point>();myfunc(mylist);Text = mylist[0].ToString(); // 123, 456}2023-07-26 16:42:041
为什么pointer-1和pointer-2的地址没有互换啊
你没有理解C语言函数“值传递”的含义,形参不会影响实参,要想通过函数改变变量的值,要传递该变量的地址给函数,现在你要通过swap函数改变指针的值,那就要把该指针的地址传递给函数,要把pointer-1和pointer-2 的地址传递给swap才行,那么swap的参数类型是int**才行如下:void swap(int** p1,int** p2){int* temp;temp=*p1;*p1=*p2;*p2=temp;}调用时用pointer-1和pointer-2的地址:swap(&pointer-1,&pointer-2); 开头的函数声明也要改一下2023-07-26 16:42:121
Delphi程序使用资源的释放
写出一个不会造成资源分配崩溃的Delphi应用程序的关键是确保如果程序中分配了资源 即使当故障发生 程序也应能释放占用的资源 文件 内存 WINDOWS资源和对象是一些必须时时加以注意的需确保释放的资源 下面的事件控制代码例子中先分配了内存 然后产生了一个错误 而造成它不再执行释放内存的程序代码 ProcedureTForm .ButtonlClick(Sender Tobject) Var Pointer Pointer Integer Numzero Intger begin Numzero Κ GetMem(Pointer ) {分配 K的内存资源} Integer Κ divNumzero {此句产生一个除法错误} FreeMem(Pointer ) {这里此句将不被执行} end 尽管大多数错误不会这样明显 但上例包含了重要的一点 当错误产生后 程序执行跳出模块 其后的资源释放程序代码不再被执行 为了确保上例中的FreeMem能够释放被GetMem占用的内存资源 必须把代码放入一个资源保护模块 这里给出一个曲型的资源保护模块的格式 {资源的分配} try {资源的使用} finally {资源的释放} end 上面的try...finally模块可以使程序总能执行finally部分中的任何程序代码 即使有错误在保护模块中产生 当try部分中的某一条代码执行引起错误时 执行将直接跳到finally部分 若执行中没有错误产生 则程序按正常顺序执行 在下面的事件控制代码例子中先分配了内存 然后产生了一个错误 但是仍然执行了释放内存的程序代码 ProcedureTForm .Button Click(Sender Tobject) Var Pointer Pointer Integer Numzero Integer begin Numzero Κ GetMem(Pointer ) {分配 K的内存资源} try Integer Κ divNumzero {此句产生一个除法错误} finally FreeMem(Pointer ) {这里此句仍将被执行} end end lishixinzhi/Article/program/Delphi/201311/250842023-07-26 16:42:191
怎么访问Pointer类型的变量?
我定义了如下一个变量:a:Pointer;FileWrite(filename,a,...);如何读取a中的内容?2023-07-26 16:42:281
java调用dll如何传入指针?invoke后如何获取指针的值?
假设我有一个叫test.dll的动态库,其中有一个函数如下: extern "C" int add(int* a,int* b,int* c,int d,char* PicPath) { FILE *fp; fp=fopen(PicPath,"wt"); for(int i=0;i { c[i]=a[i]+b[i]; fprintf(fp,"%d ",c[i]); } fclose(fp); return 1; } 该函数的功能是a,b两个数组的值相加,和存放的数组c中,在将和写入到指定的文件,数组的维数 有传入的参数决定。 问题提出: 1.Java中如何调用指针类型的参数; 2.整形的参数可以直接传入吗?; 3.PicPath为何是指针型的,怎么不是CString类型的; 4.如何获取输入型参数的返回值; Java调用动态链接库的代码如下: JNative t= new JNative("test.dll", "add"); //加载test.dll文件,并调用add方法; t.setRetVal(Type.INT); // 设置调用后的返回类型 // Java中构造指针,并为指针分配空间 Pointer a = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * 10)); Pointer b = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * 10)); Pointer c = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * 10)); Pointer strP= createPointer(100); strP.setStringAt(0, "C:\1.txt"); int d=10; // 为数组a和b赋值 for (int i = 0; i a.setIntAt(4 * i, i); b.setIntAt(4 * i, i); } // 设置参数: t.setParameter(0, a); t.setParameter(1, b); t.setParameter(2, c); t.setParameter(3, d); t.setParameter(4, strP); t.invoke(); // 调用函数并执行 // 输出和的值,注意:一个整形值需要用4个字节存储,所以j前面需要乘以4 for (int j = 0; j System.out.println(c.getAsInt(4 * j)); } // 释放内存 a.dispose(); b.dispose(); c.dispose(); 好了,这样一个完整的调用例子就结束了,我只是写出了程序中的关键的代码,具体的还需要写一 个类,并且继承一个基类,在复写基类中的方法,这些都比较简单,大家可以参考一下网上的其他 例子。 问题解答: 1.Java中调用指针类型的参数:需要创建Pointer变量,并为其分配空间 2.整形的数据可以直接传入; 3.JNative对CString类型支持不是很良好,调用CString的方法时,经常会报一些异常,所以我把路径改成 的字符指针; 4.输入型参数作为输出:可以参见以上的例子,数组c是如何设置和输出的。2023-07-26 16:42:481
Epson投影仪的pointer(电子教鞭功能)是什么用的?怎么使用梯形矫正?在遥控上是哪个键?
梯形矫正:menu菜单,进入高级模式,上下找,有梯形矫正2023-07-26 16:42:571
reference和pointer的区别和联系
下面是我写的一段程序来验证pointer与reference的区别和联系的,希望能对大家理解pointer & reference的区别和联系有所帮助:#include "stdafx.h"#include <iostream>using namespace std;int main(int argc, char* argv[]){ int ival = 1024; int *pi = &ival; // a pointer int &rval = ival; // a reference int jval = 4096; int xval = 8192;cout << "ival = " << ival << " "; cout << "&ival = " << &ival << " "; cout << endl; cout << "pi = " << pi << " "; cout << "&pi = " << &pi << " "; cout << "*pi = " << *pi << " "; cout << endl; cout << "rval = " << rval << " "; cout << "&rval = " << &rval << " "; cout << endl; cout << "jval = " << jval << " "; cout << "&jval = " << &jval << " "; cout << endl;// change the values of the reference and the pointer pi = &jval; rval = jval;// print the changes cout << endl; cout << "ival = " << ival << " "; cout << "&ival = " << &ival << " "; cout << endl; cout << "pi = " << pi << " "; cout << "&pi = " << &pi << " "; cout << "*pi = " << *pi << " "; cout << endl; cout << "rval = " << rval << " "; cout << "&rval = " << &rval << " "; cout << endl; cout << "jval = " << jval << " "; cout << "&jval = " << &jval << " "; cout << endl;cout << endl; *pi = xval; cout << "pi = " << pi << " "; cout << "&pi = " << &pi << " "; cout << "*pi = " << *pi << " "; cout << endl; cout << "jval = " << jval << " "; cout << "&jval = " << &jval << " "; cout << endl;return 0;}一次的执行结果如下:ival = 1024 &ival = 0012FF7Cpi = 0012FF7C &pi = 0012FF78 *pi = 1024rval = 1024 &rval = 0012FF7Cjval = 4096 &jval = 0012FF70ival = 4096 &ival = 0012FF7Cpi = 0012FF70 &pi = 0012FF78 *pi = 4096rval = 4096 &rval = 0012FF7Cjval = 4096 &jval = 0012FF70pi = 0012FF70 &pi = 0012FF78 *pi = 8192jval = 8192 &jval = 0012FF702023-07-26 16:43:051
请问turbo pascal中的pointer类型如何使用,能否句个例子?
var p: ^integer;begin new(p); readln(p^); writeln(p^+1); dispose(p);end.2023-07-26 16:44:032
指针变量pointer=100不对吗
程序编译起来没问题,只是有警告,可以运行。但是这样用法很不好,因为你赋的整数值是随便选的,对程序来讲没有意义。并且如果你赋的值刚好指向系统内存的关键位置,很有可能会引起系统崩溃。实际上可以将整数赋值给一个指针变量,但是不要这样做。2023-07-26 16:44:101
鼠标手型,css怎样使鼠标移到div上显示手型
<html><body><p>请把鼠标移动到单词上,可以看到鼠标指针发生变化:</p><div style="cursor:pointer">Pointer</div><br /></body></html>。 给div添加设置cursor:pointer属性就可以了。cursor 属性规定要显示的光标的类型(形状),该属性定义了鼠标指针放在一个元素边界范围内时所用的光标形状,pointer就是手型2023-07-26 16:44:352
STEP 7 以哪种格式存储POINTER参数类型?
STEP 7以 6 个字节保存POINTER参数。显示了用于保存POINTER参数类型的内存区域以及每个字节中保存的数据。POINTER参数类型保存了下列信息: DB号(如果DB中没有保存任何数据时为0)。 CPU中的内存区域(表格中列出了不同内存区域的十六进制代码)。数据的地址(按照Byte.Bit格式)。 如果将形式参数声明为POINTER参数类型,则只需要指定内存区域和地址。STEP 7自动将输入项目的格式转换为指针格式。2023-07-26 16:44:492
C++中指针做为参数传递
//box_grid *start = new box_grid;//box_grid *pointer = new box_grid;//pointer = start;上面pointer指针没必要分配空间,你只是单纯的指向start地址而已,直接写box_grid *pointer = start;就可以了;//ppointer -> next ->box_grid_l_value = ssnail_m;//(*(*ppointer).next).box_grid_v_value = ssnail_n;这两句话左边的表达式表述的意思一样啊ppointer -> next ->box_grid_l_value ==(*(*ppointer).next).box_grid_v_value ,另外,你指针还有好多需要学习,指针作为函数参数传递,能改变实参指针所指向的内容,不能改变实参指针地址2023-07-26 16:45:083
Delphi中DLL调用后如何完全释放
Delphi有静态加载Dll和动态加载Dll,静态加载的Dll不用我们释放;动态加载需要我们自己释放;这里只附上动态加载DLL的释放(此处Dll和Exe程序在同一路径下):procedure TForm1.Button2Click(Sender: TObject);var MyHandle:THandle ;FPointer:Pointer;MyDll_Func: function (s:string):Integer;stdcall;begintrytryMyHandle:=LoadLibrary("project1.Dll") ;if MyHandle<>0 thenbeginFPointer:=GetProcAddress(MyHandle ,PChar(Edit1.text));if FPointer<>nil thenbeginMyDll_Func:=FPointer;MyDll_Func(Edit1.text) ;endelseShowMessage("此"+Edit1.text+"方法,在project1.Dll中不存在");endexceptshowmessage("加载project1.Dll异常");end;finallyFreeLibrary(MyHandle) ;end;end;2023-07-26 16:45:151
请问这段C语言是什么意思(关于POINTER_32的定义)
这是甚麼鬼满意解答,根本是废材2023-07-26 16:45:264
C语言题目求解
1)&*pointer_1=&(a)=&a 因为pointer_1=&a-->*pointer_1=a 2) *&a=a 先取a的地址,再取地址里面的值,不还是a嘛。 3) (pointer_1)++和pointer_1++的区别:没有区别 应该是 *(pointer_1)++和*pointer_1++还有*(++pointer_1)的区别: *(pointer_1)++和*pointer_1++没有区别;都是先使用数值*(pointer_1)然后指针pointer_1加1; *(++pointer_1)是先使指针pointer_1加1再使用它此时指向的值。比如 int a[]={1,2,3},*pointer_1;pointer_1=a=2000H; *(pointer_1)++=*pointer_1++=1;然后pointer_1=2004H(int vc下占4个字节,tc下占2个字节) 但如果p=a=2000H;那么*(++pointer_1)=2;开始先使p=2004H,然后输出其对应的数2 实践出真知!上机操作就知道了。2023-07-26 16:45:361
两个指针变量的比较
比如char[100]两个指针指向字符串的某个位置,比如point2指向字符串头,point1指向字符串的中间,则point1>point2。这种写法用于判断指向同一个数组(最经常是字符数组,即字符串)的位置的前后,因为对于一个数组,其内存空间是连续分配的2023-07-26 16:45:461
在C语言中一个指针占用多少字节。
指针占用多少字节,取决于所使用的编译器版本,编译器有16位、32位、64位之分,16位和32位编译器可以运行在32位操作系统上,而64位操作系统可以运行这三种编译器。16位编译器下,一个指针占用2字节;32位编译器下,一个指针占用4字节;64位下,一个指针占用8字节。当前(2019年1月)国内大部分电脑已经使用上了64位Windows操作系统,但Visual Studio等编程软件默认使用的编译器是32位编译器,因此最常见的情况是一个指针占用 4 个Byte。苹果的macOS系统自带clang编译器,默认是64位,因此通常在苹果电脑上编写c语言程序时,指针占用8个字节。2023-07-26 16:45:5711
C语言 编程为什么出现 pointer required on left side of -> in function main
建议这样写 :把“struct fan *p,*pend”改为struct fan *p[30],这样p就是一个指针类型的数组,为题就能解决!2023-07-26 16:47:303
数据结构是什么
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。数据的逻辑结构和储存结构是数据结构的两个密切相关的方面,同一逻辑结构可以对应不同的存储结构。算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。数据结构的研究内容是构造复杂软件系统的基础,它的核心技术是分解与抽象。通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。类似地,通过分解将处理要求划分成各种功能,再通过抽象舍弃实现细节,就得到运算的定义。数据的物理结构介绍:数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。数据元素的机内表示(映像方法):用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据元素有若干个数据项组成时,位串中与各个数据项对应的子位串称为数据域(datafield)。因此,节点是数据元素的机内表示(或机内映像)。顺序存储结构和链式存储结构。顺序映像借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。非顺序映像借助指示元素存储位置的指针(pointer)来表示数据元素之间的逻辑关系。以上内容参考:百度百科-数据结构2023-07-26 16:48:201
什么是back pointer(反向指针)?
A back pointer is an accessory frequently used in radiation therapy to pinpointthe exitb eam centre on the patient"s skiUn.s e of this accessory facilitatespositioning the patient for treatment so that the prescribed exit point, oftendelineated by skin marks, can be brought readily intoco incidence with the exitbeam centre. The laser device described here illuminates a single plane relevantto the patient set-up procedures.参考:http://www.iop.org/EJ/article/0031-9155/18/6/007/pbv18i6p881.pdf?request-id=f9702100-fb8d-4d6d-924c-ba8c1ecc5fdb2023-07-26 16:48:451
关于指针的这段代码哪里错了,该怎么改
int swap() 要有返回值2023-07-26 16:48:522
cursor pointer是什么意思
这是css里的吧意思就是鼠标指针变成 手 的形状,和放到链接上面的鼠标指针一样。2023-07-26 16:48:591
Visual C++ 各种字母的标识含义
全局变量 g_ 常量 c_ c++类成员变量 m_ 静态变量 s_ 类型部分 指针 p 函数 fn 无效 v 句柄 h 长整型 l 布尔 b 浮点型(有时也指文件) f 双字 dw 字符串 sz 短整型 n 双精度浮点 d 计数 c(通常用cnt) 字符 ch(通常用c) 整型 i(通常用n) 字节 by 字 w 实型 r 无符号 u 描述部分 最大 Max 最小 Min 初始化 Init 临时变量 T(或Temp) 源对象 Src 目的对象 Dest2023-07-26 16:49:092
匈牙利命名法的反对声音
匈牙利命名法是一种编程时的命名规范。命名规范是程序书写规范中最重要也是最富争议的地方,自古乃兵家必争之地。命名规范有何用?四个字:名正言顺。用二分法,命名规范分为好的命名规范和坏的命名规范,也就是说名正言顺的命名规范和名不正言不顺的命名规范。好的舞鞋是让舞者感觉不到其存在的舞鞋,坏的舞鞋是让舞者带着镣铐起舞。一个坏的命名规范具有的破坏力比一个好的命名规范具有的创造力要大得多。有人认为,匈牙利命名法是一个坏的命名规范。举例说明。以静态强类型编程语言为例,分析范本为C语言和C++语言。下文中的匈法为匈牙利命名法的简称。 匈牙利命名法的收益是含糊的,无法预期的。范本1:strcpy(pstrFoo,pcstrFoo2) Vs strcpy(foo,foo2)没有一个程序员会承认自己不知道strcpy函数的参数类型,所以收益为零。范本2:unknown_function(nFoo) Vs unknown_function(foo)收益仍是没有的。对于一个不知道确定类型的函数,程序员应该去查看该函数的文档,这是一种成本。使用匈法的唯一好处是看代码的人知道这个函数要求一个整型参数,这没有任何用处。函数是一种接口,参数的类型仅仅是接口中的一小部分。诸如函数的功能、出口信息、线程安全性、异常安全性、参数合法性等重要信息还是必须查阅文档。范本3:nFoo=nBar Vs foo=bar使用匈法的唯一好处是看代码的人知道这里发生了一个整型变量的复制动作,听起来没什么问题,可以安心了。如果他看到的是nFoo=szBar,就没办法放心下来了。但是事情并非如此。首先出现问题的应该是编译器。另一方面,nFoo=nBar只是在语法上合法而已,看代码的人真正关心的是语义的合法性,匈法对此毫无帮助。另一方面,一个优秀的书写者会自觉地遵从一个法则:代码最小组织单位中的临时变量以一两个为宜,如果超过三个就应该重新组织。结合前述第一个法则,可以得出这样的结论:易于理解的代码本身就应该是易于理解的,这是代码的内建高质量。好的命名规范对内建高质量的助益相当有限,而坏的命名规范对内建高质量的损害比人们想象的要大。 匈牙利命名法在C语言是难以实施的,在C++语言中是无法实施的。匈法是类型系统的冗余,所以实施匈法的关键是我们是否能够精确地对类型系统进行复制。这取决于类型系统的复杂性。C语言:1.内置类型:int,char,float,double 复制为 n,ch,f,d?好像没有什么问题。但是void应该怎么表示,匈法做不到。2.组合类型:array,union,enum,struct 复制为 a,u,e,s?并不方便。这里的难点不是为主类型取名,而是为副类型取名。an表示整型数组?sfoo,sbar表示结构foo,结构bar?ausfoo表示联合结构foo数组?非常冗繁。3.特殊类型:pointer。pointer在理论上应该是组合类型,但是在C语言中可以认为是内置类型,因为C语言并没有非常严格地区分不同的指针类型。C++语言:1.class:如果说C语言中的struct还可以用stru搪塞过去的话,不要梦想用cls来搪塞C++中的class。严格地讲,class根本就并不是一个类型,而是创造类型的工具,在C++中,语言内置类型的数量和class创造的用户自定义类型的数量相比完全可以忽略不计。stdvectorFoo表示标准库向量类型变量Foo,是不合乎逻辑的。2.命名空间:boostfilesystemiteratorFoo,表示boost空间filesystem子空间遍历目录类型变量Foo,依旧不可行。3.模板:std::map<std::string,std::string>类型的确切名字是什么,已经超过了255个字符。4.模板参数:template <class T, class BinaryPredicate>const T& max(const T& a, const T& b, BinaryPredicate comp) 这一条来用匈牙利命名法命名,难度极大。5.类型修饰:static,extern,mutable,register,volatile,const,short,long,unsigned 加上类型修饰,更是难上加难。匈牙利命名法有其优点但也有缺点,这就需要在使用中扬长避短,合理应用它。2023-07-26 16:49:161
C++ 为什么 Dynamic Binding 必须使用 Pointer
BaseClass c = DerivedClass(); 这句话实际上生成一个临时的DerivedClass对象 再赋值给c相当于这两句话。DerivedClass c1();BaseClass c=c1;因此最终得到的c和原来的c1没有关系,因为复制成BaseClass 对象了 c根本不是DerivedClass对象,怎么会有DerivedClass的虚函数呢?BaseClass* c = new DerivedClass(); 这个是指针,那没有两个不同的对象,动态绑定,绑定到同一个地址啊。c->foo() 和 (*c).foo() 没有性能区别2023-07-26 16:49:313
这个ISO C++ forbids comparison between pointer and integer是怎么回事?
单引号双引号错误2023-07-26 16:49:402
VB拦截message消息
在Windows使用SetWindowsHookEx来实现hook(钩子)。钩子分类很多,其中消息钩子可以获取对象所接受大部分Message消息。不管是消息钩子或键盘钩子或其他钩子,安装钩子的SetWindowsHookEx函数需要一个回调函数指针。Windows收到某个消息以后确认并且发送应用程序前通知我们的回调函数。钩子有两种1)全局钩子,也就是说我们的程序可以拦截所有外部程序收的的消息。2)非全局钩子,拦截当前进程所收到的消息。为了实现全局钩子,回调函数必须在DLL中。好像用VB不能编写真正的动态链接库。以下是简单代码:"Option Explicit"uses" Windows, Messages, SysUtils, TlHelp32;"Delphi 中一些头引用,相当于C++的 *.h"键盘HOOK类型Private Type tagKBDLLHOOKSTRUCT vkCode As Long scanCode As Long flags As Long time As Long dwExtraInfo As LongEnd Type"定义API函数指针,VB不支持该定义"RegSerProc=Function(dwProcessID,dwType:Integer):Integer;stdcall;Const WH_KEYBOARD_LL = 13Const WH_MOUSE_LL = 14"钩子消息及指针Private lpMsg As TagMsgPrivate lpHook As Long"动态调用DLL函数指针Private hDll As Long"VB不支持该定义"RegPointer:POINTER;"RegServiceProc:RegSerProc;"版本Private OsInfo As OSVERSIONINFO"QQ窗口的一些句柄Private buf_hWnd As Long "前台窗口句柄Private CheckBuf_hWnd As Long "判断是否还是前台窗口句柄Private RichChat_hWnd As Long "RichEdit20A句柄Private CheckPaste As Long "判断是否在进行粘贴"定时执行程序Sub TimerWork() MessageBox 0, "一个消息", "哈哈", 64End Sub"粘贴代码Sub PasteMsg() Dim hMem As Long Dim pStr() As Byte Dim S As String S = vbCrLf + vbCrLf + "恭喜你,你已经中招了!哈哈" hMem = GlobalAlloc(GHND Or GMEM_SHARE, (LenB(S) * 2) + 4) pStr = GlobalLock(hMem) lstrcpy pStr(0), S GlobalUnLock hMem OpenClipboard 0 EmptyClipboard SetClipboardData CF_TEXT, hMem CloseClipboard GlobalFree hMem "发送WM_PASTE对QQ2006 and 2007 已经不起作用 "PostMessage(lphWnd,WM_PASTE,0,0); CheckPaste = True keybd_event VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0 keybd_event Ord("V"), MapVirtualKey(Ord("V"), 0), 0, 0 keybd_event Ord("V"), MapVirtualKey(Ord("V"), 0), KEYEVENTF_KEYUP, 0 keybd_event VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0 CheckPaste = FalseEnd Sub"Enum窗口Function EnumProc(ByVal hWnd As Long, ByVal lParam As Long) As Boolean Dim RichName As String, ParentName As String "RichEdit20A,AfxWnd42类名 Dim RichBuf As String * 255, ParentBuf As String * 255 Dim ParenthWnd As Long "获取父窗口,通过AfxWnd42进行窗口查找 ParenthWnd = GetParent(hWnd) GetClassName hWnd, RichBuf, 256 RichName = Left(RichBuf, InStr(RichBuf, vbNullChar) - 1) If RichChat_hWnd > 0 Then EnumProc = False Exit Function End If If LCase(RichName) = "richedit20a" Then "获取父窗口类名 If ParenthWnd <> 0 Then GetClassName ParenthWnd, ParentBuf, 256 ParentName = Left(ParentBuf, InStr(ParentBuf, vbNullChar) - 1) End If "通过父窗口类名进行比较,判断是否为输入窗口 If LCase(ParentName) = "afxwnd42" Then PasteMsg RichChat_hWnd = hWnd EnumProc = False Exit Function End If End If "继续查找子窗口 EnumChildWindows hWnd, AddressOf EnumProc, 0 EnumProc = TrueEnd Function"Hook代码Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim qqBuf As String * 255 Dim frmBuf As String * 255 Dim frmName As String "窗口名称 Dim clsName As String "获取类名 Dim p As KBDLLHOOKSTRUCT "键盘按键指针类型 If nCode = HC_ACTION Then If (wParam = WM_KEYDOWN) And (Not CheckPaste) Then begin "p:=PKBDLLHOOKSTRUCT(lParam); "此处应该翻译为以下: CopyMemory p, ByVal lParam, Len(p) "判断是否Ctrl+V发送 If (p.vkCode = VK_RETURN) And ((GetKeyState(VK_CONTROL) And &H8000) <> 0) Then "获取当前前台窗口 buf_hWnd = GetForegroundWindow GetWindowText buf_hWnd, frmBuf, 256 GetClassName buf_hWnd, qqBuf, 256 frmName = Left(frmBuf, InStr(frmBuf, vbNullChar) - 1) "该地方只是一个处理而已 clsName = Left(qqBuf, InStr(qqBuf, vbNullChar) - 1) "通过判断是否还是当前窗口,如果不是则执行重复操作 If (CheckBuf_hWnd <> buf_hWnd) Then CheckBuf_hWnd = buf_hWnd "查找QQ窗口 If (InStr(clsName, "#32770") > 0) And ((InStr(frmName, "聊天中") > 0) Or (InStr(frmName, " 群") > 0)) Then "重新初始化QQ编辑控件句柄 If RichChat_hWnd <> 0 Then RichChat_hWnd = 0 "遍历子窗口进行查找 EnumChildWindowsmbuf_hWnd , AddressOf EnumProc, 0 End If "如果是原来窗口,那么直接进行处理操作 ElseIf (InStr(clsName, "#32770") > 0) And ((InStr(frmName, "聊天中") > 0) Or (InStr(frmName, " 群") > 0)) Then PasteMsg End If End If End If HookProc = CallNextHookEx(lpHook, nCode, wParam, lParam)End FunctionPublic Sub Main() "注册钩子时先判断操作系统版本 OsInfo.dwOSVersionInfoSize = Len(OsInfo) GetVersionEx OsInfo If OsInfo.dwPlatformId = VER_PLATFORM_WIN32_NT Then "如果是NT系统那么向系统注册钩子 lpHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HookProc, hInstance, 0) 如果向系统注册钩子失败 If lpHook <= 0 Then SetTimer 0, 0, 500, AddressOf TimerWork Else "向9x注册系统服务 hDll = LoadLibrary("kernel32.dll") RegPointer = GetProcAddress(hDll, "RegisterServiceProcess") If RegPointer <> 0 Then "VB不支持该指针,所以就不翻译了 "RegServiceProc:=RegSerProc(RegPointer); "RegServiceProc(GetCurrentProcessID,1); Else "如果没有向9x注册成功服务器,以Timer进行操作 SetTimer 0, 0, 500, AddressOf TimerWork End If End If "消息循环,永驻内存 Do While GetMessage(lpMsg, 0, 0, 0) TranslateMessage lpMsg DispatchMessage lpMsg LoopEnd Sub2023-07-26 16:50:321
sXe Injected 怎么用?
安装到哪都一样。安装完后,首先打开,最上面的下拉箭头可以选择语言(我们肯定选择简体中文^_^),点击更新,看看有没有最新版本,然后什么都不要做,直接打开CS,它会自动缩小到托盘,然后在互联网上玩就行了。我们战队就用。WhiTe.TigEr"TeAm.QQ群:41400082023-07-26 16:40:574
软件项目外包,哪个网站比较好?
软件外包首先要根据你的实际情况来考虑外包的公司的选择。如果你所处的城市是IT/互联网企业比较活跃环境,而且项目比较复杂,沟通及时性要求比较高的情况下,建议优先考虑找本地的外包服务商合作。当然如果在本地寻找服务商的话,在预算方面可能要稍微放宽一点,因为有可能会比网上的报价略高,当然这也不是绝对的。如果通过网络平台寻找外包的话,可选择性就更大一些,目前根据本人的一些经验,寻找外包服务公司大概可以通过三种途径:第一是直接百度搜索相关的关键词自己筛选合适公司询价;第二是通过威客平台筛选公司询价,目前国内做得比较大的就是猪八戒和一品威客,这两个威客平台。当然威客平台最大的好处就是可以找到性价比较高的服务商,不好的地方就平台上的服务商能力参差不齐,有个人的也有公司的,如你的项目比较大的话,为了保险起见,最好找公司资质的服务商合作,开发合同也要要求到位。第三种就是在头条上找找一些头条号,看看有没有这方面能力的人或者企业合作。其实淘宝上也有这方面的商家,也可以了解一下。总之一句话,服务质量、团队实力、后续维护服务这些是最基本的考察点,价格方面还要根据你的实际预算情况考虑。2023-07-26 16:40:591
求求求求求帮忙翻译下这句话,用英语:我的世界失去你,就等于失去全部色彩,亲爱的,你是我的全部。
My world without you means the loss of all colors, my dear, you are my all.2023-07-26 16:40:559