我正在阅读Pointer Arithmetic中的一些内容,我遇到了两件我无法理解的事情,也不知道它的用途
address_expression - address_expression
Run Code Online (Sandbox Code Playgroud)
并且
address_expression > address_expression
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下,它们是如何工作的以及何时使用它们.
编辑:
我想说的是,如果我只取两个地址并减去它们,它们会产生什么
如果我拿两个地址并比较它们的结果或基于的比较
编辑:我现在明白了减去地址的结果,但比较地址我仍然没有得到它.
我理解1 <2,但是地址如何比另一个更大,他们在比较什么
当我创建指向某个结构的指针时,我是否必须将其设置为NULL,然后分配它然后使用它?为什么?
如果我有一个基类,只有基类的虚方法和2个派生类,那么实现了这些虚方法.
我如何能:
// causes C2259
BaseClass* base = new BaseClass[2];
BaseClass[0] = new FirstDerivedClass;
BaseClass[1] = new SecondDerivedClass;
Run Code Online (Sandbox Code Playgroud)
要么:
// causes "base is being used without being initialized"
BaseClass* base;
// causes CC59 again
BaseClass* base = new BaseClass;
base[0] = FirstDerivedClass();
base[1] = SecondDerivedClass();
Run Code Online (Sandbox Code Playgroud)
(或类似的东西)
...所以我可以BaseClass通过它访问s方法DerivedClass,但是通过指针和指针是一个DerivedClasss 的数组?
我发现很难理解指针变量大小C所依赖的因素.我检查了一些参考文献,我到目前为止获得的唯一信息是pointer尺寸取决于处理器架构.我想知道以下细节
x bits那么0 to 2^(X)-1地址位置的数量应该在那里.我正在丢失跟踪,同时关联地址位置的数量和程序可用的实际内存量. 我已经做了很多研究,但现在我仍然坚持为什么我仍然会遇到这个错误.我有一个具有以下属性的结构:
struct Account
{
//private attributes
private double mBalance;
private int mAccountNumber;
private string mName;
private string mDateCreated;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行以下操作:
class BankManager
{
//private attributes
private unsafe Account *mAccounts;
private unsafe bool *mAccountsAvailable;
private int mNumberAccounts;
}
Run Code Online (Sandbox Code Playgroud)
即使将我的类帐户转换为结构,对类BankManager中的属性使用"unsafe",并告诉编译器它可以使用不安全的代码(在属性 - >构建中),我仍然会收到此错误
*mAccounts
Run Code Online (Sandbox Code Playgroud)
任何想法为什么?我很确定我在结构中使用的所有类型都是合法的,可以在c#中使用指针.提前致谢!
对于以下代码:
int (*ptr)[10];
int a[10]={99,1,2,3,4,5,6,7,8,9};
ptr=&a;
printf("%d",(*ptr)[1]);
Run Code Online (Sandbox Code Playgroud)
它应该打印什么?我期待这里的垃圾值,但输出是1.
(我为此得出结论,初始化这种方式指针数组即ptr[10]开始指向a[10]按顺序排列的元素).
但是这个代码片段呢:
int *ptr[10];
int a[10]={0,1,2,3,4,5,6,7,8,9};
*ptr=a;
printf("%d",*ptr[1]);
Run Code Online (Sandbox Code Playgroud)
它给出了分段错误.
将double值转换为其字节表示的简单方法是什么?我尝试使用如下指针:
var
double_v:double;
address:^double;
....
double_v:=100;
address:=@double_v;
Run Code Online (Sandbox Code Playgroud)
但我的每一个概念:如何从地址读取8个字节,以"AV"结束.
可能重复: char指针和数组的堆栈指针差异
为了说明我的问题:
int main(void){
int myary[20];
int *myaryPtr;
myaryPtr = myary;
sizeof(myary); // Will it return 80? Correct?
sizeof(myaryPtr); // Will it return 4? Correct?
return 0;
}
Run Code Online (Sandbox Code Playgroud)
首先,我的假设是否正确?
然后假设我的假设是正确的,详细解释是什么?据我所知,我的20个元素数组是80个字节,但这个名称myary不仅仅是指向数组第一个元素的指针吗?所以不应该是4吗?
我想访问某个进程的某个地址.但为此我需要首先获得该进程的基地址.我正在使用一种工具来判断我是否真的做得对.该工具显示我需要以下内容:"app.exe"+0x011F9B08 = 0x119F8300
我以为我可以获得进程的基地址OpenProcess(),但这给了我:0x0000005c结果.我不认为这是对的吗?至少,不是我需要的.
我认为我需要的基地址是: 0x119F8300 - 0x011F9B08 = 0x107FE7F8 <-- base?
这是我的代码:
hWindow = FindWindow(NULL, lpWindowName);
if(hWindow)
{
GetWindowThreadProcessId(hWindow, &dwProcId);
if(dwProcId != 0)
{
// hProcHandle -> 0x0000005c
hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcId);
}
else
{
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得我打开过程的基地址?
摘自Thomas Cormen的算法导论:
" 为了简单起见,我们假设,正如我们对二叉搜索树和红黑树所做的那样,与密钥相关的任何"卫星信息"都存储在与密钥相同的节点中.实际上,人们可能实际存储了每个密钥只是一个指向包含该密钥的卫星信息的另一个磁盘页面的指针.本章中的伪代码隐含地假设每当密钥被移动时,与密钥相关的卫星信息或指向这些卫星信息的指针随密钥一起移动.从节点到节点. "
所以我一直在尝试谷歌卫星信息一词的含义,但我找不到任何东西(有关NASA的内容).我基于文本的理解是"卫星信息"是指向实际键值位置的地址,如指针?我纠正还是误解了?
编辑:是什么让它与钥匙不同?