在C++中,使用SDL2库时,经常需要将指针传递给函数。指针是一种变量,它存储另一个变量的内存地址。通过使用指针,可以在函数之间共享数据,特别是当需要修改传入的数据时。
new
和delete
进行内存管理。以下是一个简单的SDL2程序,展示了如何将指针传递给函数:
#include <SDL.h>
#include <iostream>
// 初始化SDL并创建窗口
bool initSDL(SDL_Window** window, SDL_Renderer** renderer) {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "SDL could not initialize! SDL_Error: " << SDL_GetError() << std::endl;
return false;
}
*window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
if (*window == nullptr) {
std::cerr << "Window could not be created! SDL_Error: " << SDL_GetError() << std::endl;
return false;
}
*renderer = SDL_CreateRenderer(*window, -1, SDL_RENDERER_ACCELERATED);
if (*renderer == nullptr) {
std::cerr << "Renderer could not be created! SDL_Error: " << SDL_GetError() << std::endl;
return false;
}
return true;
}
// 清理SDL资源
void cleanup(SDL_Window* window, SDL_Renderer* renderer) {
if (renderer) {
SDL_DestroyRenderer(renderer);
}
if (window) {
SDL_DestroyWindow(window);
}
SDL_Quit();
}
int main(int argc, char* argv[]) {
SDL_Window* window = nullptr;
SDL_Renderer* renderer = nullptr;
if (!initSDL(&window, &renderer)) {
cleanup(window, renderer);
return 1;
}
bool running = true;
SDL_Event event;
while (running) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
running = false;
}
}
SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
cleanup(window, renderer);
return 0;
}
nullptr
。new
后都有对应的delete
,或者使用智能指针(如std::unique_ptr
)自动管理内存。nullptr
,并在使用前检查。通过理解和正确使用指针,可以有效地管理和操作内存,提高程序的性能和灵活性。
领取专属 10元无门槛券
手把手带您无忧上云