Простите мое абсолютное отсутствие понимания здесь, просто погрузившись в C++. Поэтому я просто хотел посмотреть, могу ли я понять, как использовать putc для правильной записи символов в файл. Я хочу удостовериться, что я понимаю каждый шаг пути.При взгляде на адрес потока FILE, почему адрес отличается от адреса исходного указателя?
Теперь, глядя на адресные пространства, используемые, когда я изначально объявлял указатель на файл, и после передачи указателя на другую функцию, которая будет писать поток в файл, я заметил, что адресные пространства совершенно разные, даже по сравнению с адресным пространством исходной функции. Все еще пытаюсь полностью обернуть голову вокруг указателей, но трудно без какого-либо вмешательства сказать вам, где вы неправильно истолковываете вещи, и я знаю, что должен быть. Вот код, не против того, что я делаю это в Qtcreator. Ссылки помогают, но, пожалуйста, не просто скопируйте макароны на любую страницу информации на C++ по указателям. Я прочитал его.
#include <QCoreApplication>
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
void stream_writer(FILE & stream)
{
int c1='A',
c2='B',
c3='C',
nl='\n';
cout << &stream << endl;
putc(c1, &stream);
putc(nl, &stream);
cout << "written to testfile" << endl;
fclose(&stream);
putc(c2, stdout);
putc(c3, stdout);
putc(nl, stdout);
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
FILE* testfile;
testfile = fopen("testfile.txt", "wt");
if (testfile != NULL)
{
cout << &testfile << endl;
cout << testfile << endl;
stream_writer(*testfile);
}
else
{
cout << "Unable to open file\n";
}
return a.exec();
}
Пример моего выхода консоли после выполнения кода:
0x7ffff6aed478
0x138a200
0x138a200
написал TestFile
BC
Стек и динамически назначенные адреса указателей могут сильно различаться, да. –
Что вы находите странным? '& testfile' - это адрес вашей переменной' FILE * ', в то время как' testfile' и '& stream' - это адрес объекта' FILE', на который он указывает. (Вы также не передаете указатель на функцию, вы передаете ссылку.) – molbdnilo
Почему вы когда-либо печатаете указатели? Какую информацию вы хотите извлечь? Как же вы пришли к указателям? В C++ вам нужны указатели * очень редко, поэтому ваше время было бы лучше потрачено на изучение других вещей. –