- 陶小凡
-
你没有理解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);
开头的函数声明也要改一下
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语言指针问题。
点头像,,2023-07-26 16:40:577
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
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
实况足球8阵容问题 高手请进
买齐达内吧2023-07-26 16:42:168
行车记录仪rec是什么意思
【太平洋汽车网】行车记录仪rec是英文单词Recording的简称,就是录像中的意思。现在行车记录仪是车主必备的安全行车设备。行车记录仪功能有哪些?1、维护司机的合法权益,对横穿公路的行人及骑自行车、摩托车的,万一和他们产生了刮碰,有可能会被敲诈勒索,如果有了行车记录仪,司机可为自己提供有效的证据。2、将监控录像记录回放,事故责任一目了然,交警处理事故快速准确;既可快速撤离现场恢复交通,又可保留事发时的有效证据,营造安全畅通的交通环境。3、如果每辆车上都安装行车记录仪,司机也不敢随便违章行驶,事故发生率也会大幅度下降,肇事车辆都会被其他车辆的行车记录仪拍摄下来,交通肇事逃逸案将大大减少。4、法院在审理道路交通事故案件时,在量刑和赔偿上将更加准确和有据可依,也给保险公司的理赔提供了证据。5、碰到专业碰瓷的和拦路抢劫的,行车记录仪将可以提供破案的决定性的证据:事故发生现场和案犯的外貌特征等。6、喜欢自驾游的朋友,还可以用它来记录征服艰难险阻的过程。开车时边走边录像,同时把时间、速度、所在位置都记录在录像里,相当于“黑匣子”。7、可在家用作DV拍摄生活乐趣,或者做为家用监控使用。平时还可以做停车监控。2023-07-26 16:42:171
求个 Eminem的 Lighters 的歌词,中英对照版的world文件,要排班好的,因为要打
LightersEminem & Royce Da 5"9" ft.Bruno Mars[Bruno Mars]This one"s for you and me, living out our dreams这首歌是送给你和我的,跳出梦境让梦想成真We are right where we should be我们该在哪里?我们就在那里Lift my arms out wide, I open my eyes敞开双臂,我睁开双眼And now all I wanna see现在我想看见的Is a sky full of lighters是布满火光的夜空A sky full of lighters一个布满火光的夜空[Eminem]By the time you hear this I will have already spiralled up你听到这首歌的时候我已盘旋上升I would never do nothing to let you cowards **** my world up我永不允许你们这些懦夫搅乱我的世界If I was you, I would duck, or get struck like lightening,如果我是你,我会卑躬屈膝,或者被闪电击倒Fighters keep fighting, put your lighters up, point "em skyward uh战士坚守战斗,燃起你的打火机吧,让火光直指天空Had a dream I was king, I woke up, still king…做了一个梦,梦里的我是王者。梦醒过后,我仍然是王者This rap game"s nipple is mine for the milking,这个说唱游戏一直是我挤奶的奶嘴(说唱是EM的创作源泉)Till nobody else even ****ing feels me, till it kills me直到没有人感受我的感受,直到它将我置之死地I swear to god I"ll be the ****ing illest in this music我对上帝发誓,我会成为这音乐里最歇斯底里的人There is or there ever will be, disagree?前无古人,后无来者,你敢不同意?Feel free, but from now on I"m refusing to ever give up你不用客气,但从现在开始,我拒绝轻言放弃The only thing I ever gave"s using no more excuses唯一让你们看见的,是不再有任何借口的我Excuse me if my head is too big for this building对不起,如果我的脑袋在这栋楼里显得太过巨大And pardon me if I"m a cocky prick but you cocks are slick对不起,如果我的傲气如针刺般锋芒毕露而你却不露圭角Poppin shit on how you flipped ya life around, crock-o-shit关于你如何翻转你生活中一切的那些鬼话,只是胡说八道Who you dicks try to kid, flipped dick, you did the opposite你们这些试图玩闹的鲁莽的操蛋,所作所为适得其反You stayed the same, cause cock backwards is still cock you pricks你们只是停滞不前,因为阴险小人仍然还是阴险小人,你们这些蠢蛋I love it when I tell "em shove it当我告诉他们我洗手不干时我特别高兴Cause it wasn"t that long ago when Marshall said bust a leg因为离Marshall说他一蹶不振还没有很久Muster cause he couldn"t cut mustard mustered up nothing因为他说他还不足以振作起来Brain fuzzy, cause he"s buzzin" , woke up from that buzz头脑不清,因为嘈杂声在脑袋里嗡嗡作响,最后从喧闹中醒来Now you wonder why he does it, how he does it现在你开始好奇为什么他这么做,他是怎么做到的Wasn"t cause he had buzzards circle around his head是因为有一只美洲秃鹫在他头顶盘旋Waiting for him to drop dead, was it?静候他的暴死,是这样的吗?Or was it, cause them bitches wrote him off还是说,因为婊子们不买他的帐Little hussy ass, cause f-ck it, guess it doesn"t matter now, does it你们这些小野种一边去吧,猜猜看,现在都已经不重要了是不是What difference it make?这又有什么关系呢What it take to get it through your thick skulls用什么才能够穿过你厚重的头颅As if this ain"t some bullshit好像那根本就算不上什么屁话People don"t usually come back this way人们通常没有经历过这种方式的回归From a place that was dark as I was in从我曾经身处的那样黑暗的绝境中逃脱Just to get to this place然后再抵达这里Now let these words be like a switch blade to a haters rib cage现在让这些尖利的字眼都变成闸刀刺进怀恨者的胸腔吧And let it be known from this day forward从今天起,让这一切被世人所知晓I wanna just say thanks cause your hate is what gave me strength我只是想对怀恨者说声谢谢,正是因为你们的仇恨给了我力量So let "em bics raise cause I came with 5"9" but I feel like I"m 6"8"所以就让他们叫嚣吧,因为我和5"9"一起登场,但感觉就像我有6尺8寸般高大[Bruno Mars]This one"s for you and me, living out our dreams这首歌是送给你和我的,跳出梦境让梦想成真We are right where we should be我们该在哪里?我们就在那里Lift my arms out wide, I open my eyes敞开双臂,我睁开双眼And now all I wanna see现在我想看见的Is a sky full of lighters是布满火光的夜空A sky full of lighters一个布满火光的夜空[Royce Da 5"9"]By the time you hear this I"ll probably already be outtie你听到这首歌的时候我很有可能已经离去I advance like going from toting iron to going from buying 4 or 5 of the homies to iron man outtie我打算预先从老乡那里买4,5个钢铁侠样的东西和我一起离开My daddy told me slow down, boy, you goin to blow it我父亲劝我放慢脚步,他说,孩子,不然你就会搞砸一切And I ain"t gotta stop the beat a minute我不会停止我的节奏一分钟To tell Shady I love him the same way that he did Dr Dre on the Chronic去告诉Shady我爱他,正如他长期以来对Dr. Dre那样的感激之情Tell him how real he is or high I am告诉他他有多真实,或者我有多高兴Or how I would kill for him for him to know it又或者我如何拼杀从而让他知道这一切I cried many tears, my daddy got a bad back我多次落泪,因为我父亲的背不好So it"s only right that I right till he can march right into that post office and tell "em to hang it up所以直到他可以大步走进邮局并且告诉那些人他不做了,那就是我认为唯一正确的事Now his career"s Lebron"s jersey in 20 years现在他的生涯在20年后于Lebron的店里重新开始I"ll stop when I"m at the very top在我处于顶峰的时候我会停止脚步You shitted on me on your way up你高高在上与我胡扯It"s bout to be a scary drop这即将会发生一起恐怖的坠毁事件Cause what goes up must come down因为爬到最高最高必然会失势下落You going down on something you don"t wanna see like a hairy box你在你不想看见的某样东西前屈服了,就像是一个令人发毛的盒子Every hour, happy hour now每一个钟头,都是快乐时光Life is wacky now现在生活显得那么怪异Used to have to eat the cat to get the pussy过去常常需要吃掉大猫才能抓住小猫咪Now I"m just the cats meooww, ow而现在,我就是那只大猫,喵,嗷~Classic cow, always down for the catch weight like Pacquaiao我是标准的牛仔,像Pacquaiao一样无时无刻被列入称重的名单Ya"ll are doomed你们完蛋了I remember when T-Pain ain"t wanna work with me我还记得T-Pain不想和我合作My car starts itself, parks itself and autotunes我的车自动启动,自动停放,自动调*谐Cause now I"m in the Aston因为我现在在阿斯顿I went from having my city locked up我从一个已经上锁的城市中来To getting treated like Kwame Kilpatrick为了得到像Kwame Kilpatrick那样的待遇(Kwame Kilpatrick为底特律市长)And now I"m fantastic而现在的我无与伦比Compared to a weed high和烟cao一样让人爽歪And y"all ***** just gossiping like b*tches on a radio and TV你们这些黑gui只是像电台和电视上的biao子一样散播流言蜚语See me, we fly看我吧,我们在飞Y"all buggin out like Wendy Williams staring at a bee-hive你们就像Wendy Williams凝视蜂箱时那样匆忙撤军And how real is that这都是多么真实I remember signing my first deal and now I"m the second best I can deal with that我记得我是怎么签我第一张唱片约的,我就是现今第二好的,而且我能处理好所有事情Now Bruno can show his ass, without the MTV awards gag现在Bruno也可以展示他的屁股了,即使不是在MTV大奖的玩笑里[Bruno Mars]You and I know what it"s like to be kept down你和我都知道被抑制的感觉是怎么样的Forced to fight被迫战斗But tonight we"re alright但今晚我们都安然无恙So hold up your light所以请高举你的火光Let it shine让它闪耀发光Cause this one"s for you and me, living out our dreams因为这首歌是送给你和我的,跳出梦境让梦想成真We are right where we should be我们该在哪里?我们就在那里Lift my arms out wide, I open my eyes敞开双臂,我睁开双眼And now all I wanna see现在我想看见的Is a sky full of lighters是布满火光的夜空A sky full of lighters一个布满火光的夜空出自http://zhidao.baidu.com/link?url=3_GvwZ2sPbPpv91JlA8McFsTnwivnebMmcepht11itnGfdZTIdwLWEohlfOe9U8aF-eDzTzB86x-d4iE_g2tW_2023-07-26 16:42:111