标签: memory-address

关于C中可变内存地址的观察

我有一个问题而不是一个问题(巫婆可能会出现一个记忆问题)..我写了这个简单的程序:

#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)

c memory-address

2
推荐指数
1
解决办法
423
查看次数

如何在python中覆盖__str__方法后获取实例的地址

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)

解决了我的问题

python string memory-address

2
推荐指数
1
解决办法
151
查看次数

在Sinatra应用程序中绑定地址

我正在Sinatra中运行经典样式应用程序,我想获取应用程序绑定的URL.例如,如果我在开发环境中启动它,我希望得到:http://localhost:4567/在生产环境中,这将指向:http://example.com/ 我知道可以从请求中检索它.但是,我需要在配置块中.怎么做?

bind sinatra memory-address

2
推荐指数
1
解决办法
3505
查看次数

c char数组和指针

#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至少对我来说,第一个元素的地址的地址没有任何意义.

为什么打印正确的输出?

c arrays string pointers memory-address

2
推荐指数
2
解决办法
1854
查看次数

在C++中获取硬编码内存地址的内容

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)

c++ memory-address

2
推荐指数
1
解决办法
595
查看次数

从成员中查找struct的基址的标准方法

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*指针,但我无法得到它的工作.

c++ struct offsetof memory-address c++11

2
推荐指数
1
解决办法
1477
查看次数

(void*)指针和&指针之间的区别?

我正在使用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*)指针必须表示与&指针不同的东西.这两件事有什么区别?

c pointers void memory-address

2
推荐指数
1
解决办法
793
查看次数

打印Perl对象方法的地址?(用于重新定义Perl类方法)

我看到如何重新定义Perl类方法?,所以我想通过一个例子更好地理解它是如何工作的.(相关:我如何引用方法? - PerlMonks)

如果我有一个对象$obj是一些实例Class,其具有Class::method,则$obj还具有$obj->method; 我假设在这种情况下简化的内存布局看起来像这样(在LaTeX表生成器中制作的 ;对于下面的一个,src在这里):

表格1

...也就是说,在(比方说)地址0x1000,我们有$obj->method,这将简单地(某种程度上)指向实际Class::method定义,即(例如)在0x3500.

假设我sub在主文件中有一个定义的地方somefunc(忽略表中的前缀$),其定义最终在地址0x2000.

如果我只为$obj实例"猴子补丁"/替换方法,我希望内存布局看起来像这样(src here):

表2

现在问题就是这个 - 在下面的例子中(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)

perl reference memory-address

2
推荐指数
1
解决办法
567
查看次数

在C中的地址位置存储字符

在汇编语言中,如果你有两个变量,地址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"的最有效方法是什么?

c pointers memory-address

2
推荐指数
2
解决办法
107
查看次数

如何在C++内部获取进程的基址?

我知道我要挂钩的功能是"ac_client.exe"+ 63fe.如何找出正在运行的可执行文件的基址?

memory-address

2
推荐指数
1
解决办法
3000
查看次数

标签 统计

memory-address ×10

c ×4

pointers ×3

c++ ×2

string ×2

arrays ×1

bind ×1

c++11 ×1

offsetof ×1

perl ×1

python ×1

reference ×1

sinatra ×1

struct ×1

void ×1