• 重新复习基础草稿:不安全代码即指针的简单使用


    原文发布时间为:2008-12-06 —— 来源于本人的百度文章 [由搬家工具导入]

    using System;
    using System.Collections.Generic;
    using System.Text;


    //"不安全代码只会在使用 /unsafe 编译的情况下出现"的解决方法
    //右击右上角窗口中的项目(不是解决方案,而是它下面那个)——属性——生成——允许不安全代码 前面打钩
    //这样就可以了。。。
    namespace fanxing1
    {
    unsafe class Class3
        {
            static void Main()
            {
                int number = 1024;

                unsafe
                {
                    // Convert to byte:
                    byte* p = (byte*)&number;

                    System.Console.Write("The 4 bytes of the integer:");

                    // Display the 4 bytes of the int variable:
                    for (int i = 0; i < sizeof(int); ++i)
                    {
                        System.Console.Write(" {0:X2}", *p);
                        // Increment the pointer:
                        p++;
                    }
                    System.Console.WriteLine();
                    System.Console.WriteLine("The value of the integer: {0}", number);
                }

                char theChar = 'Z';
                char* pChar = &theChar;
                void* pVoid = pChar;
                int* pInt = (int*)pVoid;
                System.Console.WriteLine("Value of theChar = {0}", theChar);
                System.Console.WriteLine("Address of theChar = {0:X2}", (int)pChar);
                System.Console.WriteLine("Value of pChar = {0}", *pChar);
                System.Console.WriteLine("Value of pInt = {0}", *pInt);

                int num=8;

            unsafe
            {
                // Assign the address of number to a pointer:
                int* p = &num;

                System.Console.WriteLine("Value at the location pointed to by p: {0:X}", *p);
                // Commenting the following statement will remove the
                // initialization of number.
                *p = 0xffff;

                // Print the value of *p:
                System.Console.WriteLine("Value at the location pointed to by p: {0:X}", *p);

                // Print the address stored in p:
                System.Console.WriteLine("The address stored in p: {0}", p->ToString());
            }

            // Print the value of the variable number:
            System.Console.WriteLine("Value of the variable number: {0:X}", num);
               
            CoOrds home;
            unsafe
            {
                CoOrds* p = &home;
                p->x = 25;
                p->y = 12;
                System.Console.WriteLine("The coordinates are: x={0}, y={1}", p->x, p->y );
            }

            char* charPointer = stackalloc char[123];

            for (int i = 65; i < 123; i++)
            {
                charPointer[i] = (char)i;
            }

            // Print uppercase letters:
            System.Console.WriteLine("Uppercase letters:");
            for (int i = 65; i < 91; i++)
            {
                System.Console.Write(charPointer[i]);
            }
            System.Console.WriteLine();

            // Print lowercase letters:
            System.Console.WriteLine("Lowercase letters:");
            for (int i = 97; i < 123; i++)
            {
                //System.Console.Write(charPointer[i]);
                System.Console.Write(*(charPointer+i));
            }

            int[] numbers = { 0, 1, 2, 3, 4 };

            // Assign the array address to the pointer:
               
            fixed(int* p1 = numbers)
            {
                // Step through the array elements:
                for (int* p2 = p1; p2 < p1 + numbers.Length; p2++)
                {
                    System.Console.WriteLine("Value:{0} @ Address:{1}", *p2, (long)p2);
                }
            }

            int* memory = stackalloc int[30];
            long* difference;
            int* p4 = &memory[4];
            int* p5 = &memory[10];
            difference = (long*)(p5 - p4);
            System.Console.WriteLine("The difference is: {0}", (long)difference);
            int x0 = 234;
            int y0 = 236;
            int* p10 = &x0;
            int* p20 = &y0;
            System.Console.WriteLine(p10 < p20);
            System.Console.WriteLine(p20 < p10);
                Console.ReadLine();
            }
        }

        struct CoOrds
        {
            public int x;
            public int y;
        }

    }

  • 相关阅读:
    Educational Codeforces Round 72 (Rated for Div. 2)
    2249: Altruistic Amphibians 01背包
    lh的简单图论
    E. XOR Guessing 交互题 Educational Codeforces Round 71 (Rated for Div. 2)
    C. Helga Hufflepuff's Cup 树形dp 难
    B. Marvolo Gaunt's Ring 前缀后缀
    android学习-IPC机制之ACtivity绑定Service通信
    大数组分时加载算法 timedChunk
    log4j 配置和使用
    fastjson 配置和使用
  • 原文地址:https://www.cnblogs.com/handboy/p/7148492.html
Copyright © 2020-2023  润新知