社区
C#
帖子详情
一个简单的问题!!!在C中的指针类型在C#中是什么类型呀
franklitian
2003-09-13 06:40:07
在C中的指针类型在C#中是什么类型呀
...全文
221
15
打赏
收藏
一个简单的问题!!!在C中的指针类型在C#中是什么类型呀
在C中的指针类型在C#中是什么类型呀
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Geoffrey1975
2003-09-14
打赏
举报
回复
可惜的是C#中就算你得到了这个地址,好像也不能直接存取内存地址里面的内容。能够表示指针,但是不能作为指针的功能吧?unsafe功能我没用过,我也没用过IntPtr功能,请指教。
我通常都是用引用和代表来实现类似C指针的功能的。
chainet
2003-09-14
打赏
举报
回复
C中的指针就是记录保存地址的空间,一般桌面电脑用的CPU都是32bit寻址两个字节)。从386开始就是32位的啦,486,Pentium,II,III,4都是32bit,不过最新的AMD的Athron64就是64bit寻址了,扯远了。
因此任何一个占用32位bit的数据类型都可以保存指针。
在C#中int数据类型就是32位的,因此一般也就用int来表示指针。同样只要是32位的数据类型都基本都可以用来表示指针。
当然,C#还提供了一个转本用来表示指针的数据类型——IntPtr,可以更清楚的表示指针。
pcnetman
2003-09-14
打赏
举报
回复
“指针类型”可表示为“非托管类型”后跟一个 * 标记,
或者关键字 void 后跟一个 * 标记:
指针类型中,在 * 前面指定的类型称为该指针类型的目标类型。
它表示该指针类型的值所指向的变量的类型。
与引用(引用类型的值)不同,
指针不受垃圾回收器跟踪(垃圾回收器不了解指针和它们指向的数据)。
出于此原因,不允许指针指向引用或者包含引用的结构,
并且指针的目标类型必须是非托管类型。
“非托管类型”是任何不是“引用类型”并且在任何嵌套级别都不包含
“引用类型”字段的类型。换句话说,“非托管类型”是下列类型之一:
sbyte、byte、short、ushort、int、uint、long、ulong、char、float、
double、decimal 或 bool。
任何“枚举类型”。
任何“指针类型”。
任何由用户定义的只包含“非托管类型”字段的“结构类型”。
将指针和引用进行混合使用时的基本规则是;引用(对象)的目标可以包含指针,
但指针的目标不能包含引用。
与 C 和 C++ 不同,在 C# 中,当在同一声明中声明多个指针时,*
只与基础类型写在一起,而不充当每个指针名称的前缀标点符号。例如
int* pi, pj; // NOT as int *pi, *pj;
类型为 T* 的一个指针的值表示类型为 T 的一个变量的地址。
指针间接寻址运算符 * 可用于访问此变量。例如,假设具有
int* 类型的变量 P,则表达式 *P 表示一个 int 变量,该变量的地址就是 P 的值。
与对象引用类似,指针可以是 null。如果将间接寻址运算符应用于 null 指针,
则其行为将由实现自己定义。值为 null 的指针表示为将该指针的所有位都置零。
void* 类型表示指向未知类型的指针。由于目标类型是未知的,
间接寻址运算符不能应用于 void* 类型的指针,也不能对这样的指针执行任何算术运算。
但是 void* 类型的指针可以强制转换为任何其他指针类型(反之亦然)。
指针类型是一个单独类别的类型。与引用类型和值类型不同,指针类型不从 object 继承,
而且不存在指针类型和 object 之间的转换。
具体说来,指针不支持装箱和取消装箱。
但是,允许在不同指针类型之间以及指针类型与整型之间进行转换。
虽然指针可以作为 ref 或 out 参数传递,但这样做可能会导致未定义的行为,
例如,指针可能被设置为指向一个局部变量,而当调用方法返回时,
该局部变量可能已不存在了;或者指针曾指向一个固定对象,但当调用方法返回时,
该对象不再是固定的了。例如:
using System;
class Test
{
static int value = 20;
unsafe static void F(out int* pi1, ref int* pi2) {
int i = 10;
pi1 = &i;
fixed (int* pj = &value) {
// ...
pi2 = pj;
}
}
static void Main() {
int i = 10;
unsafe {
int* px1;
int* px2 = &i;
F(out px1, ref px2);
Console.WriteLine("*px1 = {0}, *px2 = {1}",
*px1, *px2); // undefined behavior
}
}
}
方法可以返回某一类型的值,而该类型可以是指针。例如,
给定一个指向连续的 int 值序列的指针、该序列的元素个数,
和另外一个 int 值 (value),下面的方法将在该整数序列中查找与该 value 匹配的值,
若找到匹配项,则返回该匹配项的地址;否则,它将返回 null:
unsafe static int* Find(int* pi, int size, int value) {
for (int i = 0; i < size; ++i) {
if (*pi == value)
return pi;
++pi;
}
return null;
}
realsnow
2003-09-14
打赏
举报
回复
我也想了解unsafe功能,请chainet讲一下或是给段源码看看
hhren
2003-09-14
打赏
举报
回复
讲清楚一点吗?我是初学者!
Geoffrey1975
2003-09-13
打赏
举报
回复
像要得到类似指针的功能,可以使用引用类型。通过装箱和拆箱的方法来传递对象。(比指针麻烦,但是安全的代码)
对于函数指针,对应的功能应该通过代表delegate来实现。
xz_king
2003-09-13
打赏
举报
回复
有指针
lustful
2003-09-13
打赏
举报
回复
在unsafe下可以使用指针
changezhong
2003-09-13
打赏
举报
回复
我记到在C#中没有指针类型的变量,这点和C,C++是不同的
webq
2003-09-13
打赏
举报
回复
晕,C#里就是没有指针啊
tpwang
2003-09-13
打赏
举报
回复
晕,C#里就是没有指针啊
xz_king
2003-09-13
打赏
举报
回复
应该和C++中的一样。 无符号整型。
zhangxuanbird
2003-09-13
打赏
举报
回复
没有
raulredondo
2003-09-13
打赏
举报
回复
在大多数情况下,句柄可以代替指针的作用
jiezhi
2003-09-13
打赏
举报
回复
no
C#
调用动态库,C_调用C++DLL.pdf
C#
调用C++DLL的参数传入,传出,string
类型
的传出等 1.数据
类型
转换
问题
2.
指针
或者地址传送
问题
基于
C#
调用c++Dll结构体数组
指针
的
问题
详解
网上有一大堆得转换对应表,也有一大堆的转换实例,但是都没有强调
一个
更重要的
问题
,就是
c#
数据
类型
和c++数据
类型
占内存长度的对应关系。 如果dll文件
中
只包含一些基础
类型
,那这个
问题
可能可以被忽略,但是如果是...
初学及入门
C#
C#
是一门用于开发web服务器,客户端的开发语言。...很多人入门一门编程语言可能会有很多
问题
,本门课程从自身学习编程语言的基础上讲解
C#
,并且并行比较C,C++,java等语言,从而能够更整体理解编程语言入门的方法。
c#
语言
中
代替
指针
,手把手教你
C#
中
指针
的使用方法
手把手教你
C#
中
指针
的使用方法
C#
是一门解释型...在
C#
中
使用
指针
,需要首先回答以下几个
问题
:1.
C#
提供了哪几种
指针
类型
C#
提供的
指针
为IntPtr或者UIntPtr,用于表示
指针
或句柄的平台特定
类型
。因此,IntPtr 可以用来...
指针
的功能和用途在C语言和
C#
中
有何区别
在C语言
中
,
指针
是一种特殊的数据
类型
,用于存储变量的内存地址。不安全代码:
C#
中
的
指针
主要用于编写不安全代码,即需要直接访问内存的特定场景。内存管理:
指针
允许程序员直接操作内存,包括动态分配和释放内存,...
C#
110,566
社区成员
642,567
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章