Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2011, 13:18   #1
Roker
 
Регистрация: 18.12.2009
Сообщений: 8
Сообщение Матрица указателей на структуру

Код:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace GameRPG
{  public struct Square
	{	
		public int PictureStruct;
		public int BarrierStruct;
		public Square(int PS, int BS)
		{
		 PictureStruct=PS;
		 BarrierStruct=BS;
		}
	}
	unsafe class World
	{
		public Square* [,] MatrixStructOfWorld;
		public byte CoordinateX;//Координаты текущего положения экрана
		public byte CoordinateY;//Координаты текущего положения экрана
		public World()
		{ int x,y; 
		  Random r=new Random();
                        Square s;
		  MatrixStructOfWorld = new Square*[100,100];
			for(x=0;x<99;x++)
			{
			  for(y=0;y<99;y++)
			   {
			  	s=new Square(10,10);
			  	MatrixStructOfWorld[x,y]=&s;
	     	              }
			}
		}
	}

	public partial class MainForm : Form
	{
		public MainForm()
		{
			InitializeComponent();
		}
		
		unsafe void MainFormLoad(object sender, EventArgs e)
		{
		   World world=new World();
		   button1.Text=Convert.ToString(world.MatrixStructOfWorld[10,10]->BarrierStruct);
		}
	
	}
}
Вот мой код, тут есть пользовательская структура, и матрица указателей на структуры. Но при работе выдает выдает не 10, а очень большое число. По С++ преподователь рассказывал что при работе с матрицами надо 2 раза указывать разыменование. Проверил работу с именением матрицы на массив, и работало правильно. Как заставить работать правильно, если разыменовать 2 не получалось.
Roker вне форума Ответить с цитированием
Старый 24.06.2011, 13:56   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
По С++ преподователь
вы знаете что работаете в С# сейчас?
в вашем коде(оценивая с точки зрения C#) вообще не вижу смысла в указателях(тем более это unsafe)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.06.2011, 14:08   #3
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Его подход с unsafe чем то похожа на то что если бы писать на С++ а в методах делать
Код:
void method()
{
    _asm 
   {
      ....
   }
}
Guy вне форума Ответить с цитированием
Старый 24.06.2011, 14:51   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
если бы писать на С++ а в методах делать
такое иногда нужно.
но иногда
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.06.2011, 16:10   #5
Roker
 
Регистрация: 18.12.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы знаете что работаете в С# сейчас?
в вашем коде(оценивая с точки зрения C#) вообще не вижу смысла в указателях(тем более это unsafe)
Да знаю. Я написал, что сделав массив указателей результат был правильный, а в матрице при разыменовании выдает очень большое число,(видимо это сам адрес а не то что хранится по этому адресу). В С++ надо было (так как матрица это массив массивов), сначала разыменовать 1 масив а потом второй, вот я и сказал где думаю есть ошибка. А смысл таких указателей в том что програма будет очень большой и приходится делать так чтобы её ускорить. Это для работы SetPixel, которые будут вызыватся 750*500 раз
Roker вне форума Ответить с цитированием
Старый 24.06.2011, 16:22   #6
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

для set/get pixel проще сделать отдельный класс
Вот во втором посте ссылка http://programmersforum.ru/showthread.php?t=157824

> 750*500 раз
Это не много
m0nax вне форума Ответить с цитированием
Старый 24.06.2011, 16:53   #7
Roker
 
Регистрация: 18.12.2009
Сообщений: 8
По умолчанию

Я делал нечто похожее, была матрица цветов 1500*1000, и функция отображала экран 750*500, длилось гдето секунд 6
Roker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
Объявление указателей Valter Общие вопросы C/C++ 5 04.04.2010 12:09
массив указателей RUSt88 Общие вопросы C/C++ 12 10.01.2010 11:11
Настройка указателей Nitrino Общие вопросы C/C++ 2 30.11.2009 02:45
Масив указателей Golovastik Общие вопросы C/C++ 1 09.09.2009 19:12