C# 到底有没有指针可以指向结构体呢??

Hongjin_ 2018-10-23 10:16:07
struct Configure_Data
{
public uint Threshold_Value;
public uint Delay;
public uint Re_Threshold_Value;
public uint Re_Delay;
}
这就是问题中的结构体。
现在需要一个指针指向这个结构体所创建的数组。
数组如下:
Configure_Data[,] Con_Data = new Configure_Data[29,4];
...全文
1742 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hongjin_ 2018-11-05
  • 打赏
  • 举报
回复
谢谢大家,此贴已结。新来的朋友记得留下你的问题,可以继续讨论
老夏 2018-10-26
  • 打赏
  • 举报
回复
一般复杂类型的对象做函数参数时都是传引用的,不习惯就想作是指针也行。象 int、double 等简单类型,以及结构体是传值的,如果要传引用,可以在前面加修饰符 ref。当然,你可以任意类型的对象都加 ref 修饰符,然后就想作是指针。
数组等集合对象也是传引用的,与元素类型无关,Configure_Data[,] Con_Data = new Configure_Data[29,4]; 直接把Con_Data想作指针就行了。
小灰狼 2018-10-26
  • 打赏
  • 举报
回复
另外,结构体在进行赋值是,是会拷贝一份新对象,而不是象类一样只把对象引用复制给变量

for example:
public struct MyStruct{
public int age;
}

......

MyStruct a = new MyStruct();
MyStruct b = a;

a.age = 10;
b.age = 20;

Console.WriteLine(a.age);
Console.WriteLine(b.age);

小灰狼 2018-10-26
  • 打赏
  • 举报
回复
引用 25 楼 DOwnstairs 的回复:
不建议违背C#标准官方推荐的编码行为进行编码,如果非要的话。建议写C++库进行调用。


实在、实在、实在…… 没办法了,才这么做吧
如果是因为感情因素,放不下对指针这个东西,那还是放弃C#算了
SoulRed 2018-10-26
  • 打赏
  • 举报
回复
不建议违背C#标准官方推荐的编码行为进行编码,如果非要的话。建议写C++库进行调用。
正怒月神 2018-10-26
  • 打赏
  • 举报
回复
C#不支持指针, 但你可以通过不安全代码unsafe来使用而已。
xiaoxiangqing 2018-10-26
  • 打赏
  • 举报
回复
现在基本上不需要再用指针了
小灰狼 2018-10-26
  • 打赏
  • 举报
回复
引用 8 楼 jidushan200 的回复:
看到大家的回复,我好想知道了点什么。
C#不存在指针吗??
本人刚刚学习C#。对于利用指针也是听同事说的


记得十多年前做 dot net 项目的时候,项目组里有一个C++的脑残粉,我们讨论技术方案时,一遇到技术难题就凑过来:“调用 Windows API 嘛~~~~~~~!”
小灰狼 2018-10-26
  • 打赏
  • 举报
回复
引用 8 楼 jidushan200 的回复:
看到大家的回复,我好想知道了点什么。
C#不存在指针吗??
本人刚刚学习C#。对于利用指针也是听同事说的


如果你想学好C#,就不要听那些纯搞C++的人瞎指挥,小心把你带沟里去
小灰狼 2018-10-26
  • 打赏
  • 举报
回复
C++ 里有引用的概念

C#里的变量基本上也是引用,用法上差不多
SupermanTm 2018-10-25
  • 打赏
  • 举报
回复
C# 中你定义一个结构类型变量的时候,这个变量本身就是指向这个结构的指针了。
如果你需要通过 API 调用传递一个“整数类型”的话,也可以先通过强制类型转换后再传递。
张天星 2018-10-25
  • 打赏
  • 举报
回复
引用 8 楼 jidushan200 的回复:
看到大家的回复,我好想知道了点什么。
C#不存在指针吗??
本人刚刚学习C#。对于利用指针也是听同事说的

C#中的参数传递,如果是new出来的,就是直接传递对象,不拷贝对象,类似于C++的指针传递,而且还不需要你自己去操作。
比C++安全多了。
如果是普通参数的内外输入输出,用ref也可以做到类似c++指针的功能。
总之,c#中不需要指针。
楼主那个二维数组指向的结构体,new出来直接用就可以了。
super_admi 2018-10-25
  • 打赏
  • 举报
回复
怨气很深的样子,但你怼错对象了。我只是描述了一个事实罢了,而且帖子也不是我发的。

引用 16 楼 xuzuning 的回复:
是的,在 unsafe 段中,可以使用指针
甚至可以在 unsafe 段中放入大段的 C++ 代码,而不出错
但这只是兼容 C++ 的表现,而不是 C# 就说有指针,不然为何只能放在 unsafe 段中呢?
既然你知道 unsafe 段中可以使用指针,那就用就是了,有何必发此一贴?
相关用法见 https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/unsafe-code-pointers/pointer-types


引用 14 楼 super_admi 的回复:
unsafe方式是可以使用指针的。
[/quote]
xuzuning 2018-10-25
  • 打赏
  • 举报
回复
是的,在 unsafe 段中,可以使用指针
甚至可以在 unsafe 段中放入大段的 C++ 代码,而不出错
但这只是兼容 C++ 的表现,而不是 C# 就说有指针,不然为何只能放在 unsafe 段中呢?
既然你知道 unsafe 段中可以使用指针,那就用就是了,有何必发此一贴?
相关用法见 https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/unsafe-code-pointers/pointer-types


引用 14 楼 super_admi 的回复:
unsafe方式是可以使用指针的。
[/quote]
耳洞不问 2018-10-25
  • 打赏
  • 举报
回复
你有汇编语言和计算机体系结构的基础就随便用“指真”,否则就纠结混乱的名词儿。指真并没有靠谱的强类型语法语义和运行时检验做保证,是个可以胡乱用来代表地址这种“低级硬件概念”的东西。
super_admi 2018-10-25
  • 打赏
  • 举报
回复
unsafe方式是可以使用指针的。

引用 10 楼 xuzuning 的回复:
C# 不存在指针
指针 是 C/C++ 的产物,C# 因为变量存放算法上的原因,没有引入指针的概念
  • 打赏
  • 举报
回复
如果需要传入结构体指针,该结构中还有指向其他结构的指针,比如调用CreateProcessAsUser,怎么传?还是要用unsafe byte*吧,没指针能行?
  • 打赏
  • 举报
回复
变量 Con_Data 指向这个结构体数组,这在 .net 中直截了当。 现在你说“现在就需要一个指针指向这个结构体数组”这就是假设你在纠结汇编语言或者 c 语言概念而不需要 .net 平台。
  • 打赏
  • 举报
回复
如果你有那些从低级语言继承了指针概念的编程语言的基础,就会学到过,你随便用一个长整数、随便一个字符串(或者别的什么乱七八糟)数组,或者是一个跟长整数差不多的叫做”指针“的类型代名词,就可以作为指针了。指针操作是垃圾的,使用的是任意无符号整数概念。根本没有什么靠谱的保证。一切都靠程序员意淫,靠想象力,然后就是各种”求上帝保佑在运行1000次某条代码执行之后在1001次的时候不会出现“野指针异常”。 在 .net 中的“对象引用”是一个非常严谨、规范的概念。在编程逻辑中你就说“结构体Configure_Data的数组”就行了,就能清楚地说明程序逻辑。说“它的指针”只能算是继承糟粕概念图省事儿。
SoulRed 2018-10-24
  • 打赏
  • 举报
回复
有。。但是你这是一个悖论,假设传递参数,类默认是传递引用,对结构默认是传值(传递一份拷贝)
加载更多回复(7)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧