我有一个问题而不是一个问题(巫婆可能会出现一个记忆问题)..我写了这个简单的程序:
#include <stdio.h>
#include <stdlib.h>
int multi(int x, int y);
int main(){
int x;
int y;
printf("Enter the first number x: \n");
scanf("%d",&x);
printf("Enter the second number y: \n");
scanf("%d",&y);
int z=multi(x,y);
printf("The Result of the multiplication is : %d\n",z,"\n");
printf("The Memory adresse of x is : %d\n",&x);
printf("The Memory adresse of y is : %d\n",&y);
printf("The Memory adresse of z is : %d\n",&z);
getchar();
return 0;
}
int multi(int x,int y){
int c=x*y;
printf("The Memory adresse of c is …Run Code Online (Sandbox Code Playgroud) class Bar:
pass
class Foo:
def __str__(self): return "Foo instance"
>> aBar = Bar()
>> print aBar
<__main__.Bar instance at 0x100572a28>
>> aFoo = Foo()
>> print aFoo
Foo instance
Run Code Online (Sandbox Code Playgroud)
有没有办法在覆盖str方法后打印出aFoo的地址?
运用
>>repr(aFoo)
Run Code Online (Sandbox Code Playgroud)
解决了我的问题
我正在Sinatra中运行经典样式应用程序,我想获取应用程序绑定的URL.例如,如果我在开发环境中启动它,我希望得到:http://localhost:4567/在生产环境中,这将指向:http://example.com/
我知道可以从请求中检索它.但是,我需要在配置块中.怎么做?
#include<stdio.h>
int main(){
char a[6],*p;
a[0]='a';
a[1]='b';
a[2]='c';
a[3]='4';
a[4]='e';
a[5]='p';
a[6]='f';
a[7]='e';
printf("%s\n",a);
printf("printing address of each array element");
p=a;
printf("%u\n",&p[0]);
printf("%u\n",p+1);
printf("%u\n",a+2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下......
anusha@anusha-laptop:~/Desktop/prep$ ./a.out
abc4epfe
printing address of each array element3216565606
3216565607
3216565608
Run Code Online (Sandbox Code Playgroud)
当我声明数组char a[6]为什么它允许我分配一个值a[7]?是否不需要为最后一个元素追加空字符?
另外p = a => p保存char数组a的第一个元素的地址.我不明白在地址(p[0])前放置一个'&'是怎么回事.&p[0]是指a至少对我来说,第一个元素的地址的地址没有任何意义.
为什么打印正确的输出?
double address = 3068770752;
std::string hello = (char *)address;
Run Code Online (Sandbox Code Playgroud)
错误:从'double'类型无效转换为'char*'类型
所以,如果我使用类型long或int,这是有效的,但是对于double类型,这是行不通的.我怎样才能做到这一点?
谢谢!
编辑:我正在用C++编写PHP扩展,这是自定义函数"get_memory_data(双地址)"的"内容",在您使用的php中:
<?php
$a = "hello";
$b = get_memaddress($a); //0x123456
$c = hextodec($b); //3068770752
$d = get_memdata($c); //hello
Run Code Online (Sandbox Code Playgroud) struct Data {
int a;
std::string b;
float c;
};
std::string* allocateDataAndGetString() {
Data* dataPtr(someAllocator.allocate<Data>());
return &dataPtr.b;
}
Data* getBaseDataPtrFromString(std::string* mStringMember) {
// ???
}
int main() {
std::string* stringPtr(allocateDataAndGetString());
Data* dataPtr(getBaseDataPtrFromString
}
Run Code Online (Sandbox Code Playgroud)
我Data在堆上分配了一个实例,并指向了它的std::string b;成员.如何Data以标准方式获取字符串所属实例的基址,并考虑偏移和填充?
我试过减sizeof(int)并std::offsetof(Data, std::string)从std::string*指针,但我无法得到它的工作.
我正在使用LCTHW学习C ,我遇到了一些我感兴趣的指针,所以我发现了这一点.通过它,我发现这个代码:
void *vptr; // declare as a void pointer type
int val = 1;
int *iptr;
// void type can hold any pointer type or reference
iptr = &val;
vptr = iptr;
printf("iptr=%p, vptr=%p\n", (void *)iptr, (void *)vptr);
Run Code Online (Sandbox Code Playgroud)
跑步给我这样的东西:
iptr=0x7fffa97a8464, vptr=0x7fffa97a8464
Run Code Online (Sandbox Code Playgroud)
显然,内存地址是相同的,所以C为它们打印出相同的东西.但是,在试验代码并放入时,而不是最后一行:
printf("iptr=%p, vptr=%p\n", &iptr, &vptr);
Run Code Online (Sandbox Code Playgroud)
我明白了:
iptr=0x7fff61a21ee0, vptr=0x7fff61a21ed8
Run Code Online (Sandbox Code Playgroud)
我打印出两个不同的内存地址,这不应该发生.第一个问题:如果这里的&符号表示"地址",正如丹尼斯在帖子中所说,为什么这两行代码会输出两个不同的东西?第二个问题:由于两行代码输出两个不同的东西,显然(void*)指针必须表示与&指针不同的东西.这两件事有什么区别?
我看到如何重新定义Perl类方法?,所以我想通过一个例子更好地理解它是如何工作的.(相关:我如何引用方法? - PerlMonks)
如果我有一个对象$obj是一些实例Class,其具有Class::method,则$obj还具有$obj->method; 我假设在这种情况下简化的内存布局看起来像这样(在LaTeX表生成器中制作的表 ;对于下面的一个,src在这里):

...也就是说,在(比方说)地址0x1000,我们有$obj->method,这将简单地(某种程度上)指向实际Class::method定义,即(例如)在0x3500.
假设我sub在主文件中有一个定义的地方somefunc(忽略表中的前缀$),其定义最终在地址0x2000.
如果我只为$obj实例"猴子补丁"/替换方法,我希望内存布局看起来像这样(src here):

现在问题就是这个 - 在下面的例子中(stuff的命名比上面的表更加独特),我实际上想Demo::My::Functions::test_me用主文件中定义的方法替换整个类方法repl_test_me.我真的不知道对地址有什么期望,所以我试图在方法修补之前和之后显示我认为的地址,使用的是%p说明符printf.代码输出:
$ perl cltest.pl
Starting Demo::Main...
Orig test_me!
1: DMFo: 8e63dc0 DMFo->test_me 8e916f8 DMF::test_me 8e916e8 repl_test_me 8e91748
Orig test_me!
-- CODE --
Subroutine Demo::My::Functions::test_me redefined at cltest.pl line 59. …Run Code Online (Sandbox Code Playgroud) 在汇编语言中,如果你有两个变量,地址a0和字节t0,通过输入很容易将t0存储在地址a0的最开头
sb $t0,0($a0)
Run Code Online (Sandbox Code Playgroud)
现在,我想在C中做同样的事情,在这种情况下,我有
char* a0 = "AbC";
char t0 = 'w';
Run Code Online (Sandbox Code Playgroud)
我知道我无法直接访问和修改a0 [0],因为这会导致错误的访问错误.用t0中的值替换a0中的开头"A"的最有效方法是什么?
我知道我要挂钩的功能是"ac_client.exe"+ 63fe.如何找出正在运行的可执行文件的基址?