标签: memory-address

C指针 - 不同的地址

我正在尝试学习C指针,但我无法理解某些东西......以下代码:

#include <stdio.h>

void foo(int *x, int *y);

void foo(int *x, int *y) {
    printf("x = %p\ny = %p\n", &x, &y);
    *x = 5;
    *y = 6;
}

int main(void) {
    int a, b;
    printf("a = %p\nb = %p\n", &a, &b);
    foo(&a, &b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么地址不同?第一个printf(主)输出两个地址.另一个printf(foo)输出不同的地址.我将地址传递给foo(&operator).

c pointers memory-address

0
推荐指数
1
解决办法
317
查看次数

指针失败(C++)

可能重复:
c ++警告:局部变量的地址

char* strdup(const char* s)
{
    char dup[strlen(s)];
    for (int i = 0; i<strlen(s); i++)
    {
        dup[i]=s[i];
    }
    return dup;
}
Run Code Online (Sandbox Code Playgroud)

该函数应该保存已向后读取的新数组和另一个插槽.当我编译它时,我收到错误"警告:返回本地变量'dup'的地址",当我运行程序时,它返回内存地址.

c++ memory pointers memory-address

0
推荐指数
1
解决办法
249
查看次数

指针包含什么类型的数据

我写了以下代码

int num =   3;
int *ptr = &num;

cout << *ptr << " " << ptr << endl;
Run Code Online (Sandbox Code Playgroud)

并得到以下输出.

3 0x7fff5fbff43c
Run Code Online (Sandbox Code Playgroud)

我想知道这是什么类型的数据.

0x7fff5fbff43c

是吗

一个.签名浮点数据

湾 有符号整数数据

C.无符号浮点数据

d.无符号整数数据

即 签名字符数据

c++ memory pointers memory-address

0
推荐指数
1
解决办法
120
查看次数

Windows上的默认64位地址数据类型

我需要在Windows 7 64位上操作64位地址,我现在正在使用类似的东西

BYTE m_myAddress[8];
Run Code Online (Sandbox Code Playgroud)

但如果我需要添加0x60到地址,它会变得非常棘手.我可以转换它,但我想问一下哪种数据类型最适合这个.

应该使用什么数据类型来存储64位地址?

c c++ 64-bit memory-address

0
推荐指数
1
解决办法
222
查看次数

向量推回对元素地址的影响

我有一个类对象的向量.函数随机选择两个元素并返回其地址.

现在使用这两个元素,我想生成同一个类的两个新对象,并使用push_back将它们添加到向量中.

这是两个父元素的地址:

这里没问题.然后生成第一个子对象,并使用vector_pushback将其添加到向量的末尾.问题是,在执行了push_back命令之后,似乎父对象的地址发生了变化.这是push_back之后的调试器状态:

正如您所看到的,地址显然保持不变,但看起来它们指向push_back之后的垃圾值.据我所知,push_back在向量的末尾添加了一个元素.因此,我希望2个元素的地址根本不会改变.

怎么了?

c++ vector push-back memory-address

0
推荐指数
1
解决办法
1400
查看次数

对于具有32 MB RAM的PC,"最后"字节的8位十六进制数字地址是多少?

我正在读一本关于装配的书; Jones和Bartlett出版社80x86大会简介

作者给出了练习但没有答案.显然,在进一步发展之前,我想确保我完全理解章节概念.

donc,

对于具有32 MB RAM的PC,"最后"字节的8位十六进制数字地址是多少?

这是我的解决方案:

1)转换为32 MBytes = 268435456位

2)I减去8位以删除最后一个字节268435448

3)转换为十六进制FFFFFF8

所以我得到了FFFFFF8

这看起来不错吗?

memory hardware assembly processor memory-address

0
推荐指数
1
解决办法
2553
查看次数

C上的地址空间相同

我有一个问题,有些人可以帮助我

我目前有这个代码(这些都是全局变量)

    int * x;
    int * y;
Run Code Online (Sandbox Code Playgroud)

现在,在main方法上我想得到那两个的地址空间,如下所示

    int main ( int argc, char *argv[ ] ){
     printf("%p\n",x);
     printf("%p\n",y);
     system("pause");
     return 0;
     }
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我得到00000000作为地址空间(好像他们"共享"相同的地址空间)我的问题是1)为什么它的地址空间为0?由于我们正在讨论全局变量,因此它应该采用另一个地址2)当它们应该采用000000和000004时,为什么两个变量在内存中共享相同的空间(假设赋值是正确的)

提前感谢您的回答

c pointers global-variables memory-address

0
推荐指数
1
解决办法
98
查看次数

为什么两个变量共享同一个地址?

在iMac,OsX 10.5上使用gcc 4.0.1版,

一些变量被赋予与二维数组中第二组元素相同的地址.

我该怎么做才能阻止编译器以这种方式分配地址?

包括一个演示问题的程序:

#include <stdio.h>

long a[1][10];
long b;
long c;

int main()
{
    printf( "Address of a[0][0]: %p\n", &a[0][0] );
    printf( "Address of a[0][1]: %p\n\n", &a[0][1] );
    printf( "Address of a[1][0]: %p\n", &a[1][0] );
    printf( "Address of a[1][1]: %p\n\n", &a[1][1] );
    printf( "Address of b: %p\n", &b );
    printf( "Address of c: %p\n\n", &c );
}
Run Code Online (Sandbox Code Playgroud)

输出:

Address of a[0][0]: 0x2040
Address of a[0][1]: 0x2044

Address of a[1][0]: 0x2068
Address of a[1][1]: 0x206c

Address of b: …
Run Code Online (Sandbox Code Playgroud)

c variables gcc overlap memory-address

0
推荐指数
1
解决办法
323
查看次数

作为函数参数的指针接收内存地址(C)

我写了一些代码:

#include <stdlib.h>
#include <stdio.h>

    int a_function(int *a, int a_length, int *returned_address)
    {
        returned_address=a+a_length-1;
        return 0;
    }

    int main(void)
    {
        int n=5;
        int *a;
        int *address=NULL;
        a=(int*)malloc(n*sizeof(*a));
        a_function(a,n,address);
        printf("%p",address);
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

预期的结果是指针'地址'指向a + 4地址处的内存块.但结果是指针"地址"仍指向NULL(屏幕上的打印结果类似于'00000000').但是,当我开始调试时,在'a_function'中,'returned_address'确实指向了+ 4的内存块.我错过了什么?

c pointers arguments function memory-address

0
推荐指数
1
解决办法
865
查看次数

对结构在内存中的位置感到困惑

我正在探索指针,特别是当前正在搞乱结构指针.目前,我有这个代码:

#include <stdlib.h>
#include <stdio.h>

struct point{
double x;
double y;
};

int main(){
    char *pc;
    int *pi;
    struct point *pp;

    //char pointer
    printf("%p\n\n", (void*)pc);
    pc++;
    printf("%p\n\n", (void*)pc);

    //int pointer
    printf("%p\n\n", (void*)pi);
    pi += 2;
    printf("%p\n\n", (void*)pi);

    //struct pointer
    printf("%p\n\n", (void*)pp);
    pp -= 3;
    printf("%p\n\n", (void*)pp);
}
Run Code Online (Sandbox Code Playgroud)

这段代码的输出是这样的:

0x104978036

0x104978037

0x7fff5ec4bbc8

0x7fff5ec4bbd0

0x0

0xffffffffffffffd0
Run Code Online (Sandbox Code Playgroud)

据我所知,前4个输出,带charint指针算法,但我很困惑,为什么它返回0x0struct指针的内存地址?另外,如果我想double y在内存中说地址,我该如何打印?

c memory struct pointers memory-address

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