Вывод на экран адреса VC++ and Dev C++ - C (СИ)

  1. Вот код на Си среда разработки VC++ 2010C1 2 3 4 5 6 int *pi;   int i = 2;     pi = &i;     printf("%d \n", pi);вот на dev C++C1 2 3 4 5 6 int *pi;   int i = 2;     pi = &i;     printf("%d \n", pi);Проблема в том что при выводе в VC++ каждом запуске программы адрес получается разные. А на дев С++ все нормально т е одно и тоже адрес.


textual

Код:

 
 printf("%d", ++pi);


Похожие ответы
  1. Ввести в память машины одномерный целочисленный массив, размером не менее 30 элементов. Ввод осуществить с клавиатуры. Посчитать количество всех чисел, сумма цифр которых меньше 10.

  1. Прочитал на разных ресурсах про выравнивание адреса данных, но многое ещё не понятно. Чего я понял: Выравнивание адреса нужно для того что бы снизить количество обращений процессором к памяти для считывания хранимых данных Чем больше объем данных адрес которых нуждается в выравнивании, тем больше усилий процессор прилагает что бы получить данные по невыровненному адресу Не все процессоры умеют выравнивать адрес памяти самостоятельно Чего я не понял: Увидел следующее утчерждение: Адрес данных должен быть кратен размеру считываемых данных. Как программист может повлиять на кратность адреса, если выделением адреса данных занимается компилятор и этот процесс насколько понимаю выходит за пределы программного кода? Некоторые компиляторы сами занимаются выравниванием адресов(дополняя данные адреса нулями) что бы можно было считать блок данных за минимальное количество обращений процессором к памяти. Именно не понятно, зачем забивать данные нулями Прошу помочь разобратьсяДобавлено через 17 минут И ещё не ясно что приводит к "кривости" памяти которую потом приходится выравниватьДобавлено через 52 минуты Пока бродил по инету, нашел пример где структура с одинаковыми полями занимает разный объем в памяти в зависимости от последовательности типов в структуре. Это тоже как то связано с выравниванием данных?http://rextester.com/WLM62012 24 байтаhttp://rextester.com/UKWSN11327 16 байтаДобавлено через 11 минут Кажется начал понимать почему заполняются нулями данные. Похоже дело в том, что каждый процессор может прочитать только определенное количество данных за одно обращение к памяти. Допустим, это число равно 4. Когда процессор читает char, нельзя позволить что бы он прочитал 1 байт который относится к char и 3 байта от других данных. Поэтому к char будут добавлены нули, что бы свести общий размер данных к 4. Если это так, то почему char a = 'b'; printf("%zu", sizeof(a)); равно 1, а не 4? В то время как внутри структуры из примера выше заполнение нулями есть(это определил потому что размер структуры превышает тот размер которого достаточно для хранения его данных)Добавлено через 13 минут Сообщение от sys_beginner то время как внутри структуры из примера выше заполнение нулями есть Выходит о выравнивании данных нужно заботиться только в том случае, когда в непрерывной области памяти находятся данные разных типов? Как например структуры, или массив функций которые возвращают значения разного типа? (Массив функций возвращаемое значение которых есть указатель на void*)

  1. Написать программу, определяющую количество отрицательных элементов в массиве и выводящую их адреса. При вводе/выводе элементов использовать индексы, а обработку элементов массива осуществлять с помощью указателей. Расчет должен производиться в функции, в которую массив передается по указателю. Помогите, х3 что делать, я походу вообще не понимаю указатели, выводить чушь полную. #include "stdio.h"C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 int kolich(int n,float *mas) { int i,k; k=0; for (i=1; i

  1. Здравствуйте, возникла проблема - создал структуру, одним из полей которой является массив указателей на void, массив нужен для создания связного списка, при записи в массив указателей на другие структуры проблем не возникает, но при попытке обращения к полям структур через эти указатели возникает ошибка компиляции: kirill@kirill-X401A1:~/C/HTML parser > gcc -o test test.c -std=c99 test.c: In function ‘main’: test.c:77:16: warning: dereferencing ‘void *’ pointer [enabled by default] Html.links[i]->a = 12; ^ test.c:77:16: error: request for member ‘a’ in something not a structure or union Указатель на void необходим т.к. заранее не известно с какой структурой будет осуществлена связь. Возможно ли вместо массива использовать union, для достижения цели? Пожалуйста подскажите как можно решить проблему.C1 2 3 4 5 6 7 8 9 10 struct html {     int a;     //struct head *links[LINKS];     void *links[LINKS]; };   struct head {     int a;     void *links[LINKS]; };C1 2 3 4 5 6     struct html Html;     struct head Head;     for (int i = 0; i < LINKS; i++) {         Html.links[i] = (struct head *)&Head;         Html.links[i]->a = 12;                              // ошибка     }

  1. Добрый день Есть лабораторная. Упрощенный кусочек кода:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 int main(int argc, char** argv) { for (i=1; i

  1. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #include #include #include #define LEN 5   double arr[LEN] = {1.1, 2.54, 0.8, 9.246, 3.0}; double tar1[LEN], tar2[LEN];     void copy_ind(double [], double [], int); void copy_ptr(double *, double *, int);   int main(void) {     setlocale(LC_ALL, "Russian");     copy_ind(arr, tar1, LEN);     copy_ptr(arr, tar2, LEN);     system("pause");         return 0; }   void copy_ind(double arr[], double zippo[], int len) {     int i;         for (i=0; i

  1. Добрый день, подскажите, почему в отладке в функции указателю адрес переменной присваивается корректно, но при возврате указатель смотрит по прежнему адресу (здесь на NULL, скажем). необходимо получить адрес структуры g_Prm. Возврат return-ом не интересует. Именно такая конструкция. Или необходимо использовать указатель на указатель?C1 2 3 4 5 6 7 8 9 10 11 12 13 14 TStructParam  g_Prm;   void GetParam (TStructParam   *apPtr) {    apPtr = &g_Ptr; }   int main () {   TStructParam *tCurPrm = NULL;     GetParam (tCurPrm);   return 1; }

  1. Всем привет Подскажите, можно ли каким-то образом передать значение переменной i из одной функции в другую? например:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include   int func () {     int i=5;     int *pi=&i;     printf("Значение i=%d", *pi);     return 0; }   int main () {     &i=7;     printf("А теперь значение i=%d", &i);     return 0; }

  1. в данном случае проблема выглядит следующим образом:C++1 2 3 4 5 6 7 8 9 10 11 12 13 main(void) {    char *map, *moves;    readFile(map, moves); }   readFile(char *map, char *moves) {    map = (char*)malloc(over9000);    moves = ... //тоже самое, что и выше    //перед передачей в функцию по этим указателям находился мусор    //после маллоков в map и moves по прежнему тот же мусор..как с этим бороться? }

  1. Необходимо разработать программу, в которой выполняется ввод списка записей определенного типа, а затем - обработка списка. Сначала в программе должен вводиться размер списка (целое число), а сам список создается в виде динамического массива структур. Ввод одной записи осуществляется в одной строке. Описание структур приводится после вариантов задания. задание: Вывести на экран все сообщения (СООБЩЕНИЕ1) отправленные адресатом, номер которого указывает пользователь. Адреса отправителя и получателя (целые положительные трехзначные числа); текст сообщения (строка 50 символов); дата пересылки (в формате ДД.ММ.ГГГГ).