2015-02-06 2 views
-3

Я хочу создать сценарий C, который имеет переменный указатель, например:Переменные указатели в C

int main(void){ 
double x = 0; 
do{ 
    x+=1; 
    fprint("%d \n",x) 
}while{x<100} 
} 

Но я хочу й быть указателем и что каждое значение, которое х принимает быть написано в определенный файл.

Я думаю Theres 2 вещи делать, хотя я не знаю, как сделать их правильно:

  1. Asign память к указателю.
  2. создайте файл и добавьте его.
+0

Это не ясно из вашего поста, что ваша реальная цель состоит в том, то есть то, что это реальная проблема, которую вы пытаетесь решить, и где вам нужна помощь. –

+0

Я пытаюсь понять указатели, создав такой скрипт, у меня должно получиться файл с номерами от 1 до 99, но каждая запись в файле была написана указателем переменной, а не просто напечатана на нем. – Averagedude

+0

Я предлагаю работать с примерами в учебник или работу через онлайн-учебник, например, на http://www.tutorialspoint.com/cprogramming/c_pointers.htm. –

ответ

0

Я не совсем уверен, о чем вы просите, но, возможно, это может вам помочь. Здесь x является указателем на y, и программа увеличивает y в цикле и разыскивает указатель x и записывает его текущее значение в файл. Конечно, для этого вам не понадобится указатель, это просто пример.

int main(int argc, char** argv) { 
    int y = 0; 
    // x points to variable y 
    int* x = &y; 
    FILE* fout = fopen("output.txt", "w"); 
    do { 
    // dereference x and write value to file 
    fprintf(fout, "%d\n", *x); 
    // increment y 
    y++; 
    // dereference pointer x and check if value less than 100 
    } while(*x < 100); 
    fclose(fout); 
    return 0; 
} 
+0

Да, спасибо, это то, что мне нужно – Averagedude

+0

Я собирался заставить его разобраться в файле ввода-вывода самостоятельно, так как это, очевидно, домашнее задание. – FlyingGuy

+0

@Cyclone - я бы сделал это, но для поддержки требуется 15 репутации, которых у меня, по-видимому, еще нет, и также я не знаю, как отметить ее как правильную, я относительно новичок на сайте. – Averagedude

0

Хорошо, поэтому прежде всего вы не указали ни одного указателя в этом коде.

указатель в C объявлен как:

[действительный тип] * [имя переменной], например:

double * age ; 

Это создает определение указателя для двойной, но не выделяет никакой памяти в куче. Для того, чтобы инициализировать указатель необходимо выделить некоторую память, и вы должны сообщить компилятору, сколько, например:

age = malloc(sizeof(double)) ; 

Thats получает достаточно места памяти, чтобы хранить ровно одну двойную ценность, независимо от того, что фактический размер аа double находится в системе, на которой вы строите это!

в своем коде вы должны разыменования указателя, прежде чем попытаться увеличить его, например:

*age++; 

Звездочка перед именем переменной сообщает компилятору, чтобы дать вам доступ к фактическим данным, а ++ может выполнять свою работу. Если вы не разыгрываете вас, вы соблазняете, в лучшем случае повреждение данных или, в худшем случае, можете сбой системы.

Так что ваш код должен выглядеть примерно так:

void main(int argc, char *argv[]){ 

double * x ; 
x = malloc(sizeof(double)); 

*x = 0 

do{ 
*x++; 
    fprint("%d \n",*x) 
}while{x* < 100} 

} 
+0

Когда вы делаете x = malloc (sizeof (x)); вы aasigning x с пустым пространством, равным размеру двойника? – Averagedude

+0

'x = malloc (sizeof (x))' - это не может быть прав. 'x' имеет тип указателя, поэтому' sizeof (x) 'может отличаться от' sizeof (double) '. –

+0

Не должно быть 'x = malloc (sizeof (* x));' – Cyclonecode

Смежные вопросы