标签: address-operator

为什么有人想要重载&(地址)运算符?

可能重复:有
什么合理的理由使一元运算符超载?

我刚看了这个问题,我不禁想知道:

为什么有人可能想要重载&("address-of")运算符?

   some_class* operator&() const { return address_of_object; }

有没有合法的用例?

c++ overloading operator-overloading address-operator

20
推荐指数
3
解决办法
7860
查看次数

to_address的特定用例

因此,显然C ++ 20正在得到std::to_address

从cppreference页面上,它的用例对我来说似乎并不明确。我们已经有了operator&std::addressof,为什么还需要另一个函数来为其参数提供地址?

c++ address-operator c++20

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

什么是C++中Reference和Pointer返回类型之间的区别

如果我要在C++中创建一个简单的对象,返回成员的地址与返回指针之间的区别是什么.据我所知,C++没有自动垃圾收集,因此它不会保留引用计数.那么为什么会有人这样做呢:

class CRectangle {
public:
    string& getName( );
    int&    getWidth( );
    int&    getHeight( );
private:
    string  name;
    int     height;
    int     width;
};
Run Code Online (Sandbox Code Playgroud)

而不是这样:

class CRectangle {
public:
    string* getName( );
    int*    getWidth( );
    int*    getHeight( );
private:
    string  name;
    int     height;
    int     width;
};
Run Code Online (Sandbox Code Playgroud)

我意识到这些将允许您访问成员数据,但我并不关心这个简单示例中的正确封装.那么差异是什么?加速?可读性?样式?

c++ pointers coding-style reference address-operator

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

理解C中交换程序的指针

我试图更好地理解指针和C语言中的引用,我的课程提供了以下程序作为示例.

#include <stdio.h>

void swap(int* a, int* b);

int main(void)
{
    int x = 1;
    int y = 2;

    swap(&x, &y);
    printf("x is %i\n", x);
    printf("y is %i\n", y);
}

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

我将以下内容混为一谈,看看它是否能帮助我更好地了解正在发生的事情,主要是关于使用&与*(取消引用)的需要.基本上,声明指向int类型(int*a)的指针与使用星号指向"取消引用"(*a =*b)的语法对我来说非常混乱,我希望有人可以启发我.以下是我认为有助于澄清的上述另一个版本,但实际上并非如此:

#include <stdio.h>

void swap(int* a, int* b);

int main(void)
{
    int x = 1;
    int y = 2;
    int *a = &x;
    int *b = &y;

    swap(a, b);
    printf("x is %i\n", …
Run Code Online (Sandbox Code Playgroud)

c pointers dereference address-operator

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

地址替代C#中的替代

任何人都可以帮我解决C#中有关VB6中AddressOf运算符的替代解决方案吗?AddressOf返回一个long值.我可以用什么方式获得C#中的输出?

c# address-operator

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

获取Objective-c属性的地址(这是一个C结构)

我有一个Objective-C类,它包含一个C风格的结构.我需要调用一个C函数传递一个指向这个对象成员(aka属性)的指针.对于我的生活,我无法弄清楚如何获得这个C结构的地址.使用传统的&运算符来获取地址,我得到一个LValue编译器错误.

typedef struct _myStruct
{
   int aNumber;
}MyStruct, *pMyStruct;

@interface MyClass : NSObject {
    MyStruct mystruct;
}
@property (readwrite) MyStruct myStruct;
@end
Run Code Online (Sandbox Code Playgroud)

以下代码导致编译器错误:

MyClass* myClass = [[MyClass alloc] init];

MyStruct* p = &(myClass.myStruct);
Run Code Online (Sandbox Code Playgroud)

如何获取指向对象myStruct成员的指针myClass

objective-c lvalue declared-property address-operator

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

"地址"VB6到VB.NET

我有一些问题要将我的VB6项目转换为VB.NET

我不明白这个"AddressOf"函数应该如何在VB.NET中使用

我的VB6代码:

Declare Function MP4_ClientStart Lib "hikclient.dll" _
  (pClientinfo As CLIENT_VIDEOINFO, ByVal abab As Long) As Long

Public Sub ReadDataCallBack(ByVal nPort As Long, pPacketBuffer As Byte, _
  ByVal nPacketSize As Long)

  If Not bSaved_DVS Then
    bSaved_DVS = True
    HW_OpenStream hChannelHandle, pPacketBuffer, nPacketSize
  End If
    HW_InputData hChannelHandle, pPacketBuffer, nPacketSize

End Sub

nn1 = MP4_ClientStart(clientinfo, AddressOf ReadDataCallBack)
Run Code Online (Sandbox Code Playgroud)

vb.net vb6 callback address-operator

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

如何修复AddressOf需要轻松的对话委托错误

对不起,这是C#和VB.Net的混合体

我有一个带有2个代表的C#类:

public delegate string GetSettingDelegate(string key);
public event GetSettingDelegate GetSettingEvent;

public delegate void SetSettingDelegate(string key, string value);
public event SetSettingDelegate SetSettingEvent;
Run Code Online (Sandbox Code Playgroud)

在VB类中,我为事件添加了处理程序:

AddHandler _gisCtrl.SetSettingEvent, AddressOf SetSetting
AddHandler _gisCtrl.GetSettingEvent, AddressOf GetSetting
Run Code Online (Sandbox Code Playgroud)

当我尝试删除处理程序时:

RemoveHandler _gisCtrl.SetSettingEvent, AddressOf SetSetting
RemoveHandler _gisCtrl.GetSettingEvent, AddressOf GetSetting
Run Code Online (Sandbox Code Playgroud)

SetSetting没问题,但GetSetting会发出警告:

AddressOf表达式在此上下文中无效,因为AddressOf的方法参数需要与事件的delagate类型进行轻松的对话.

这是方法

Private Sub SetSetting(ByVal key As String, ByVal value As String)
    KernMobileBusinessLayer.[Global].Settings.SetValue(key, value)
End Sub

Private Function GetSetting(ByVal key As String)
    Return KernMobileBusinessLayer.[Global].Settings.GetString(key)
End Function
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题以及为什么它首先被抛出?2个委托/事件/方法看起来很相似,我不知道为什么一个是好的,一个人发出警告.

c# vb.net delegates address-operator

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

C中可以将地址分配给变量吗?

是否可以在内存中为变量分配您想要的地址?

我试图这样做,但我收到错误消息“左值需要作为赋值的左操作数”。

int main() {
  int i = 10;
  &i = 7200;
  printf("i=%d address=%u", i, &i);
}
Run Code Online (Sandbox Code Playgroud)

我的方法有什么问题?在 C 中有什么方法可以将我们想要的地址分配给变量吗?

c pointers addressof memory-address address-operator

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

在for循环中声明int数组并在C中更改其元素

我是 C 新手,目前正在学习数组。我有这个代码:

#include <stdio.h>
int main()
{   
    int available[6];
    for(int o=1; o<=3; o++){
        available[o]=20;
        printf("%d\n",&available[o]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

哪个应该输出(以我的理解):

20
20
20
Run Code Online (Sandbox Code Playgroud)

现在的问题是它输出:

2293300
2293304
2293308
Run Code Online (Sandbox Code Playgroud)

我是否错过了一个关键部分并犯了一些愚蠢的错误?任何帮助将不胜感激。

c printf address-operator

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