怎样定义有大小的数组,如 int [] ia

海涵德 2014-05-07 10:24:15
怎样定义有大小的数组,如
int [] ia;
怎样明确的数组的大小,而不是通过实例解决
int [] ia=new int[10];
...全文
212 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
海涵德 2014-05-07
  • 打赏
  • 举报
回复
7楼的代码在Winform中,在silverlight中还是不行。
海涵德 2014-05-07
  • 打赏
  • 举报
回复
这是一段关于读取照片Exif的程序,在Winform中有很多代码实例。 Winform的代码我已经调试成功了,我本想迁移到Sliverlight中,但在Winform中引用的 using System.Drawing; 在Silverlight中由于安全策略的原因不支持这个引用。 这时我找到这段代码,在cpp项目中调试成功了,想仿照这段代码过最原始读取文件字节的方式完成,这段代码正好可以。
佛火 2014-05-07
  • 打赏
  • 举报
回复
部分示例:

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct ExifInfoType
    {
        //char  CameraMake   [32];
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public StringBuilder CameraMake;

        //int  DateTimeOffsets[MAX_DATE_COPIES];
        const int MAX_DATE_COPIES = 100; //sample value
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_DATE_COPIES)]
        public int[] DateTimeOffsets;
    }
更多用法 ,请参见: Marshaling Data with Platform Invoke http://msdn.microsoft.com/en-us/library/fzhhdwae(v=vs.100).aspx
海涵德 2014-05-07
  • 打赏
  • 举报
回复
2楼的没有通过编译 错误 1 不安全代码只会在使用 /unsafe 编译的情况下出现 E:\DevApp\VisualStudio.NET2010.App\Silverlight4\WCFServices\madaming\madamingExif4Silverlight\MainPage.xaml.cs 54 43 madamingExif4Silverlight
threenewbee 2014-05-07
  • 打赏
  • 举报
回复
试试看加上 [MarshalAs(UnmanagedType.LPArray, SizeConst=大小)]
宝_爸 2014-05-07
  • 打赏
  • 举报
回复
看的不太明白啊。 int [] ia;只是一个空指针,这时候没法指定数组长度。 int [] ia=new int[10]; 指向一个有10个item的数组。这时候才能制定长度 如果你需要int[]作为函数的参数,可以在函数中使用Length检查数组长度。
海涵德 2014-05-07
  • 打赏
  • 举报
回复
谢谢指点 我想把cpp、中的结构改写成c#
typedef struct {
    char  CameraMake   [32];
    char  CameraModel  [40];
    char  DateTime     [20];
    int   Height, Width;
    int   Orientation;
    int   IsColor;
    int   Process;
    int   FlashUsed;
    float FocalLength;
    float ExposureTime;
    float ApertureFNumber;
    float Distance;
    float CCDWidth;
    float ExposureBias;
    float DigitalZoomRatio;
    int   FocalLength35mmEquiv; // Exif 2.2 tag - usually not present.
    int   Whitebalance;
    int   MeteringMode;
    int   ExposureProgram;
    int   ExposureMode;
    int   ISOequivalent;
    int   LightSource;
    char  Comments[MAX_COMMENT];

    unsigned ThumbnailOffset;          // Exif offset to thumbnail
    unsigned ThumbnailSize;            // Size of thumbnail.
    unsigned LargestExifOffset;        // Last exif data referenced (to check if thumbnail is at end)

    char  ThumbnailAtEnd;              // Exif header ends with the thumbnail
                                       // (we can only modify the thumbnail if its at the end)
    int   ThumbnailSizeOffset;

    int  DateTimeOffsets[MAX_DATE_COPIES];
    int  numDateTimeTags;

    int GpsInfoPresent;
    char GpsLat[31];
    char GpsLong[31];
    char GpsAlt[20];
} ExifInfo_t;
/////////////////////
  struct ExifInfoType
        {
            char[]  CameraMake=new char [32];//[32]
            char[] CameraModel = new char[40];
            char[] DateTime = new char[20];

            int   Height, Width;
            int   Orientation;
            int   IsColor;
            int   Process;
            int   FlashUsed;
            float FocalLength;
            float ExposureTime;
            float ApertureFNumber;
            float Distance;
            float CCDWidth;
            float ExposureBias;
            float DigitalZoomRatio;
            int   FocalLength35mmEquiv; // Exif 2.2 tag - usually not present.
            int   Whitebalance;
            int   MeteringMode;
            int   ExposureProgram;
            int   ExposureMode;
            int   ISOequivalent;
            int   LightSource;
            char [] Comments=new  char   [MAX_COMMENT];
            

            UInt16 ThumbnailOffset;  //    unsigned ThumbnailOffset;          // Exif offset to thumbnail
            

    UInt16 ThumbnailSize;//   unsigned ThumbnailSize;            // Size of thumbnail.
    UInt16  LargestExifOffset; // unsigned LargestExifOffset;        // Last exif data referenced (to check if thumbnail is at end)

    char  ThumbnailAtEnd;              // Exif header ends with the thumbnail
                                       // (we can only modify the thumbnail if its at the end)
    int   ThumbnailSizeOffset;

    int[]  DateTimeOffsets=new int  [MAX_DATE_COPIES];
    int  numDateTimeTags;

    int  GpsInfoPresent;
    char[]  GpsLat=new char [31];
    char[]  GpsLong=new char [31];
    char[]  GpsAlt=new char [20];
} ;
出现的问题,请帮助解决。
佛火 2014-05-07
  • 打赏
  • 举报
回复
c# 目前只能在unsafe结构体成员中显示指定数组大小。 比如: public struct MyStructure { unsafe public fixed int FixedSizeArray[100]; }
祥子爱游戏 2014-05-07
  • 打赏
  • 举报
回复
List ArrayList?
海涵德 2014-05-07
  • 打赏
  • 举报
回复
7楼的解答在Silverlight项目中编译过去了。
第九章 数组 9.1 理解数组 C语言数组是一个由若干同类型数据组成的集合,数组由连续的存储单元组成,最低地址对应于数组的第一个元素,最高地址对应于最后一个元素。 9.2 一维数组 9.2.1 一维数组定义 定义形式: 类型说明符 数组名[常量表达式] 类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度,数组中每个成员称为数组元素。 对于数组的说明: (1)类型说明符实际上是指数组元素的类型。 (2)数组名实际上就是第一个元素的地址,是一个常量。 (3)方括号中常量表达式表示数组元素的个数,可以是符号常量。因为数组和一般变量的空间在编译阶段分配,而变量的值在运行时才获得,编译时并不知道变量的值,因此不能用变量定义数组大小。 (4)数组占用空间大小的计算,可以用sizeof运算符。数组总字节数=sizeof(类型说明符)*数组长度=sizeof(数组名)。 9.2.2 一维数组引用 数组元素的的标识方法为数组名后跟下标。引用数组元素的一般形式为:数组名[下标]。下标只能为整型常量、整型变量、整型表达式。 每个数组元素和变量一样,可以进行读写、输入输出操作等。 数组定义的方括号中给出的是数组长度,只能是常量。数组元素引用中的下标是元素在数组中位置的标识,可以是整型常量、整型变量、整型表达式。 注意: (1)使用具有N个元素的数组时,引用下标为0~N-1,第一个元素为数组名[0],最后一个元素为数组名[N-1]。数组名代表起始地址,下标代表从起始地址开始偏移几个元素,第一个元素偏移0,第N个元素偏移N-1,下标为N-1。 (2)引用数组元素下标越界时,运行并不报错(因为检查是否越界占用系统时间,C语言崇尚高效),但越界使用可能破坏其他数据。 (3)C语言中只能单个的使用下标标识每个数组元素。 用循环语句输入、输出数组元素的值: int iArr[5]; for(i=0;i<5;i++) scanf("%d",&iArr;); for(i=0;i<5;i++) printf("%d",iArr[i]); 对元素分别赋值1,2,3,4,5 int iArr[5]; for(i=0;i<5;i++) iArr[i]=i+1; (4)数组定义后若不给元素赋值,则值由编译器指定无意义的数据。 9.2.3 一维数组初始化 给数组赋值有两种方法:赋值语句对数组元素逐个赋值,初始化赋值。初始化赋值指在数组定义时给数组元素赋予初值。 数组初始化是在编译阶段进行的,可以减少运行时间,提高效率。 初始化赋值的形式: 类型说明符 数组名[常量表达式]={值1,值2,···,值n}; 对数组初始化赋值的说明: (1)可以只给部分元素赋初值,当{}中值的个数少于元素个数时,只给前面部分元素赋初值,未赋值的元素会赋予与数组元素类型相关的特定值,整型为0,浮点型为0.0,字符型为'\0'。 补充说明:字符'0'和'\0'区别: 字符'0':ASCII码为48,内存中存放表示:00110000。 字符'\0' :ASCII码为0,表示一个字符串结束的标志。这是转义字符(整体视为一个字符)。由于内存中存储字符,存储的是对应字符集的字符编码,所以内存中的表现形式为00000000。 (2)只能给元素逐个赋值。如给5个元素全部赋初值1,要写成: int iA[5]={1,1,1,1,1}; (3)如果给元素全部赋值,可以不给出数组长度(即数组元素的个数)。 9.2.4 一维数组案例分析 例:把一个整数插入到已经按照从小到大顺序排好序的整型数组中,使得整型数组依然有序。 【问题分析】

110,535

社区成员

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

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

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