zoukankan      html  css  js  c++  java
  • 重新复习基础草稿:不安全代码即指针的简单使用

    原文发布时间为: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;
        }

    }

  • 相关阅读:
    Redis 学习之路 (009)
    树莓派进阶之路 (012)
    树莓派进阶之路 (011)
    树莓派UFW防火墙简单设置
    树莓派进阶之路 (002)
    Redis学习之路(008)- Redis C语言客户端库hiredis文档翻译
    Redis学习之路(007)- Redis学习手册(实例代码)
    树莓派进阶之路 (000)
    Redis学习之路(006)- Redis学习手册(Hashes数据类型)
    Redis学习之路(005)- redis内存数据库C客户端hiredis API 中文说明
  • 原文地址:https://www.cnblogs.com/handboy/p/7148492.html
Copyright © 2011-2022 走看看