标签: memory-address

在C++中获取类对象的地址?

假设我有一个C++类,如下所示:

class Point {
// implementing some operations
}
Run Code Online (Sandbox Code Playgroud)

然后:

Point p1;
Point p2 = p1;
Run Code Online (Sandbox Code Playgroud)

如果我想知道p2的地址,那么我可以使用&p2.但是如何获得p2存储的地址?因为p2不是指针,所以我不能只使用cout << p2;

c++ memory-address

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

检查和修改C中的内存地址

我想基本上做以下(这可能是危险的,不是什么)只是为了它:

int main() {

    int x = 0x00ff00ff;

    printf("Value at addr x: %x\n",*x);


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

基本上看一下我机器中某个地址的内容.也许写信给它.我猜我不允许做后者.

我得到的错误是error: invalid type argument of 'unary *'.

有没有办法做到这一点?

c pointers memory-address

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

为什么交换(&a ++,&b ++)会出现错误"unary'和''中的无效左值?

#include<stdio.h>
int swap(int *a,int *b);
int main()
{
    int a=10,b=20;
    swap(&a++,&b++);
    printf("a=%d\nb=%d",a,b);
    return 0;
}

int swap(int *a,int *b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}
Run Code Online (Sandbox Code Playgroud)

为什么这个函数会给出错误"一元中的无效左值"和"?"?正常swap(&a,&b)工作正常,但swap(&a++,&b++)也有swap(&(a++),&(b++))错误.这背后的原因是什么?

c printf swap pointers memory-address

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

为什么访问变量的地址会改变另一个变量的地址?

代码1:

int main(){
   int a=1;
   int b=2;
   cout << "&a: "<<&a << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出1:

&a: 0x22ff48
Run Code Online (Sandbox Code Playgroud)

代码2:

int main(){
   int a=1;
   int b=2;
   cout << "&a: "<<&a << endl;
   cout << "&b: "<<&b << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出2:

&a: 0x22ff4c
&b: 0x22ff48
Run Code Online (Sandbox Code Playgroud)


所以我的问题是为什么a当我打印出varibale的地址时,varibale的地址发生了变化b

c++ memory memory-address

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

使用C++中的跳转表实现switch语句

我正在努力提高解析器的速度.并且switch-case,有时它很有用,但我发现它仍然很慢.不确定 - 如果C++支持此功能(地址检查点(带附加参数)),那就太棒了!

简单的例子:

enum Transport //MOTORBIKE = 1, CAR = 2,  ...  SHIP = 10
Transport foo = //unknown

    switch(foo)
{
    case MOTORBIKE : /*do something*/ break;
    case CAR : /*do something*/ break;
    //////////////////////////
    case SHIP : /*do something*/ break;
}
Run Code Online (Sandbox Code Playgroud)

如果变量fooSHIP,至少程序必须重新检查该值最多十次! - >它仍然很慢.

如果C++支持检查点:

Transport foo = //unknown
__checkpoint smart_switch;

goto (smart_switch + foo); //instant call!!!

smart_switch + MOTORBIKE : /*do something*/ goto __end;
smart_switch + CAR : /*do …
Run Code Online (Sandbox Code Playgroud)

c++ performance switch-statement memory-address

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

为什么localarr ==&localarr?

我的意思是,为什么这个数字与控制台相同?

#include <stdio.h>
int main()
{
    char localarr[99];
    printf("%d\n",(int)localarr);
    printf("%d\n",(int)&localarr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,localarr的地址实际上并没有存储在任何变量中.但是生成的代码可以存储在幕后,或者至少gcc可以发出警告,而不是在我将此类函数传递给期望char**的函数时允许段错误.为什么我们有这种行为?

相关:为什么

char **ppl = &localarr;
Run Code Online (Sandbox Code Playgroud)

结果是:

error: cannot convert ‘char (*)[99]’ to ‘char**’
Run Code Online (Sandbox Code Playgroud)

c arrays callstack local memory-address

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

&在函数声明返回类型中

以下是什么意思?

class Something
{
 public:
   int m_nValue;

   const int& GetValue() const { return m_nValue; }
   int& GetValue() { return m_nValue; }
};
Run Code Online (Sandbox Code Playgroud)

此代码取自此处.

c++ return function memory-address

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

C:为什么指针和指针有不同的值?

如果我在OS X上运行以下命令:

int main (void)
{
    int* n; // initialise(declare) pointer
    *n = 20; // the value in address pointed to by n is 20
    printf("n: %i, n&: %i\n", n, &n);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

n:1592302 512,n&:1592302 480

为什么不同的价值观?

c pointers memory-address

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

为什么char似乎在数组中占用的空间多于单独的空间

char testChar = 'a';
char myCharString[] = "asd";
char *pointerToFirstChar = &(myCharString[0]);
char *pointerToSecondChar = &(myCharString[1]);
cout << "A char takes " << sizeof(testChar) << " byte(s)";
cout << "Value was " << pointerToFirstChar << ", address: " << &pointerToFirstChar << endl;
cout << "Value 2 was " << pointerToSecondChar << ", address:" << &pointerToSecondChar << endl;
Run Code Online (Sandbox Code Playgroud)

这个输出:

"一个字符需要1个字节"

"......地址:00F3F718"

"......地址:00F3F70C",

我认为地址之间的区别应该是1个字节,因为这将是分隔它们的数据的大小.为什么不是这样?

c++ pointers char memory-address

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

变量如何在同一时间点有两个不同的地址?

我尝试使用指针来玩一些指定值'i'和我发现的内容,因为有两个不同的地址分配给声明%u和%lu,%llu.变量如何可能在同一个执行实例中具有两个不同的地址 -

#include <stdio.h>
int main(void)
{
  int i;
  float f;
 printf("\nEnter an integer:\t");
 scanf("%d",&i);

  printf("\nValue of address of i=%u",&i);
  printf("\nvalue of address of i=%d",&i);
  printf("\nValue of address of i=%lu",&i);
  printf("\nValue of address of i=%llu",&i);

  printf("\nvalue of i=%d",i);
  printf("\nvalue of i=%u",i);
  printf("\nvalue of i=%lu",i);
  printf("\nvalue of i=%llu\n",i);

}
Run Code Online (Sandbox Code Playgroud)

这是输出 -

aalpanigrahi@aalpanigrahi-HP-Pavilion-g4-Notebook-PC:~/Desktop/Daily programs/pointers$ ./pointer001

    Enter an integer:   12

    Value of address of i=1193639268
    value of address of i=1193639268
    Value of address of i=140725797092708
    Value of address of i=140725797092708
    value of i=12 …
Run Code Online (Sandbox Code Playgroud)

c pointers memory-address

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