标签: memory-address

将地址传递给C中的函数

我是C的新手,我有一个计算一些变量的函数.但是现在让我们简化一下.我想要的是拥有一个"返回"多个变量的函数.虽然据我所知,你只能在C中返回一个变量.所以我被告知你可以传递一个变量的地址并按这样做.这是我走了多远,我想知道我可以伸出援助之手.关于C90禁止的东西,我得到了一些错误.我几乎是肯定的,这是我的语法.

说这是我的主要功能:

void func(int*, int*);

int main()
{
    int x, y;
    func(&x, &y);

    printf("Value of x is: %d\n", x);
    printf("Value of y is: %d\n", y);

    return 0;
}

void func(int* x, int* y)
{
    x = 5;
    y = 5;
}
Run Code Online (Sandbox Code Playgroud)

这基本上就是我正在使用的结构.有人能帮我一把吗?

c pointers function memory-address

3
推荐指数
1
解决办法
3万
查看次数

如何编写宏来从C中的内存访问数据?

上周我接受了采访.我被要求写一个宏来读取一个内存位置(比方说0x2000).我在正常编程中编写代码,但我无法编写宏.
请帮我弄清楚如何为下面的代码编写宏:

char *address = (char*)0x2000; // address is a pointer to address 3000 char val

*address = 36; // write 36 to 8 bit location at address

val = *address; // read 8 bit value from address
Run Code Online (Sandbox Code Playgroud)

c macros memory-address c-preprocessor

3
推荐指数
1
解决办法
1722
查看次数

将数组和结构传递给C函数

我想知道为什么我们可以通过值将结构传递给C函数,但我们永远不能对数组(通过地址传递)做同样的事情.

当我学习C时,他们告诉我数组会消耗很多堆栈,因此不希望按值传递它们.

但似乎结构通常(如果不总是)大于数组并且是更复杂的数据结构,所以这个解释现在对我来说没有意义!

任何人都可以帮助尽可能多的细节吗?

arrays structure function memory-address

3
推荐指数
1
解决办法
6210
查看次数

C++ - 为什么静态字符串在由不同函数引用时会给出稍微不同的地址?

只是试图掌握C++的复杂性,因此正在搞乱字符串和指针.但是,我遇到了一些我不太了解的事情.

首先,我使用相同的功能,据我所知,每次都给它相同的参数.我从主要和另一个函数调用它,并从每个函数获取略有不同的地址.从内存的某些部分读取数据的功能如下.

void printDataFromAddressForLength(char* pointer, long length)
{
    cout << "\n" << endl;

    for (int i=0; i<length; i++)
    {
        cout << "&pointer: " << &pointer + i << "\tData: " << pointer + i << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个函数的目标是在每一行上打印当前地址和值,然后迭代并可以从任何地方做同样的事情 - 非常简单的功能,没有真正的目的.

这是我在main()中的代码

MessageData messageData = returnStruct();
printDataFromAddressForLength(messageData.pChar, messageData.length);
Run Code Online (Sandbox Code Playgroud)

我也从returnStruct()函数调用printDataFromAddressForLength.这段代码如下所示.

// Returns MessageData from function 
MessageData returnStruct()
{
static string staticTestString = "Time and time again";

MessageData metaData;
MessageData* pMetaData = &metaData;

pMetaData->pChar = &staticTestString[0];
pMetaData->length = staticTestString.length();

printDataFromAddressForLength(pMetaData->pChar, pMetaData->length);

return …
Run Code Online (Sandbox Code Playgroud)

c++ struct pointers reference memory-address

3
推荐指数
1
解决办法
216
查看次数

每次都获得不同的地址

在下面的代码中,每次为第一个元素获取不同的地址std::vector v.为什么会这样?

#include <memory>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v;

    for (int i=0; i<10; ++i)
    {
        int b = i;

        v.push_back(b);

        std::cout << std::addressof(v[0]) << std::endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0x603010
0x603030
0x603010
0x603010
0x603050
0x603050
0x603050
0x603050
0x603080
0x603080
Run Code Online (Sandbox Code Playgroud)

c++ g++ stdvector memory-address c++11

3
推荐指数
1
解决办法
264
查看次数

我可以使用我的C++程序之外的随机内存地址访问随机数据

如果2个程序正在运行,并且一个程序在内存地址存储一个数字,并且如果我知道该内存地址,并将其硬编码到第二个程序并打印出该地址的值,它是否会实际获得该信息?C++是否允许程序访问存储在RAM中的任何数据,无论它是否属于程序的一部分?

c++ ram pointers memory-address

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

C++:指针在传递后包含不同的地址

所以我有一些像这样的代码:

#include <iostream>

using namespace std;

class Base1 {};
class Base2 {};

class A
{
public:
    A() {}
    void foo(Base2* ptr) { cout << "This is A. B is at the address " << ptr << endl; }
};

A *global_a;

class B : public Base1, public Base2
{
public:
    B() {}
    void bar()
    {
        cout << "This is B. I am at the address " << this << endl;
        global_a->foo(this);
    }
};

int main()
{
    global_a = new A(); …
Run Code Online (Sandbox Code Playgroud)

c++ pointers multiple-inheritance memory-address visual-studio-2013

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

如何在C中获取结构的起始和结束地址?

随着"地址"运算符一元&.我可以知道结构的起始地址.

 struct Point {
     int* data;
     int x;
     int y;
 };

 struct Point offCenter = { 1, 1 };
 struct Point* offCentreAddress_start = &offCenter ;
Run Code Online (Sandbox Code Playgroud)

如何确定结束地址(offCenterAddress_end)?

c struct memory-address

3
推荐指数
1
解决办法
2480
查看次数

是否可以识别地址引用是否属于进程地址空间中的静态/堆/堆栈

我们有一种机制可以监控捕获引用地址的加载和存储指令.我想对地址进行分类,无论它们属于堆栈,堆还是分配静态变量的区域.有没有办法以编程方式进行此分类?

我最初的想法是在进程开始运行时立即执行一个带有小内存请求(1?)的malloc(),这样我就可以捕获堆的"基地址"(或起始地址).这样,我可以区分静态分配的那些变量和其余的变量.对于那些不属于静态区域的引用(那些是堆和堆栈),我怎么能区分它们?

一些小测试显示以下简单代码(在Linux 3.18/x86-64中运行,使用gcc 4.8.4编译)

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

int x;

int foo (void)
{
    int s;
    int *h = malloc (sizeof(int));

    printf ("x = %p, *s = %p, h = %p\n", &x, &s, h);
}

int main (int argc, char *argv[])
{
    foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

显示了地址空间的一些随机化(不是在静态变量中,而是在剩余部分 - 堆和堆栈中),这可能会增加一些不确定性,但可能是一种找到这些地区的限制的方法.

c heap-memory memory-address

3
推荐指数
1
解决办法
1326
查看次数

为什么这个宏体中存在类型转换?

我学习计算机工程,这里的老师总是告诉我们定义这样的μC地址:

#define FIO0DIR (* (unsigned int *) 0x2009C000) //GPIO direction register from the lpc1769

但他们从未真正解释过为什么或正在发生什么.

所以我的问题是:为什么演员阵容呢?

c embedded microcontroller memory-address

3
推荐指数
1
解决办法
144
查看次数