C语言二级指针Demo - Win32 版本
生活随笔
收集整理的這篇文章主要介紹了
C语言二级指针Demo - Win32 版本
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
指針可以指向一份普通類型的數(shù)據(jù),也可以指向一份指針類型的數(shù)據(jù)。
一個指針指向的是另外一個指針,我們就稱它為二級指針,或者指向指針的指針。
假設有一個 int 類型的變量 a,p1是指向 a 的指針變量,p2 又是指向 p1 的指針變量,它們的關系轉換為C語言代碼:
? ? int a =100;
? ? int *p1 = &a;
? ? int **p2 = &p1;
指針變量也是一種變量,也會占用存儲空間,也可以使用&獲取它的地址。C語言不限制指針的級數(shù)。
代碼;
#include <windows.h> #include "resource.h"LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);HINSTANCE hInst; TCHAR szClassName[] = TEXT("twoPointerDemo");int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil) {HWND hwnd;MSG messages;WNDCLASSEX wincl;hInst = hThisInstance;wincl.hInstance = hThisInstance;wincl.lpszClassName = szClassName;wincl.lpfnWndProc = WindowProcedure;wincl.style = CS_DBLCLKS;wincl.cbSize = sizeof (WNDCLASSEX);wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);wincl.hCursor = LoadCursor (NULL, IDC_ARROW);wincl.lpszMenuName = MAKEINTRESOURCE (IDC_TWOPOINTERDEMO);wincl.cbClsExtra = 0;wincl.cbWndExtra = 0;wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);if (!RegisterClassEx (&wincl))return 0;hwnd = CreateWindowEx (0,szClassName,TEXT("C 二級指針Demo"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,200,HWND_DESKTOP,NULL,hThisInstance,NULL);ShowWindow (hwnd, nFunsterStil);while (GetMessage (&messages, NULL, 0, 0)){TranslateMessage(&messages);DispatchMessage(&messages);}return messages.wParam; }LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {PAINTSTRUCT ps;HDC hdc;RECT rt; char szBuffer[100]; int a =909;int *p1 = &a;int **p2 = &p1;int ***p3 = &p2;switch (message){case WM_COMMAND:switch (LOWORD(wParam)){case IDM_twoPointer: hdc=GetDC(hwnd);wsprintf(szBuffer, "%d, %d, %d, %d",a, *p1, **p2, ***p3);TextOut(hdc,10,20,szBuffer,lstrlen(szBuffer));wsprintf(szBuffer, "&p2 = %#X, p3 = %#X",&p2, p3);TextOut(hdc,10,50,szBuffer,lstrlen(szBuffer));printf("&p1 = %#X, p2 = %#X, *p3 = %#X\n", &p1, p2, *p3);wsprintf(szBuffer, "&p1 = %#X, p2 = %#X, *p3 = %#X",&p1, p2, *p3);TextOut(hdc,10,80,szBuffer,lstrlen(szBuffer));wsprintf(szBuffer, " &a = %#X, p1 = %#X, *p2 = %#X, **p3 = %#X",&a, p1, *p2, **p3);TextOut(hdc,10,110,szBuffer,lstrlen(szBuffer));break;case IDM_ABOUT:MessageBox (hwnd, TEXT ("twoPointerDemo v1.0\nCopyright (C) 2020\n by bo"),TEXT ("twoPointerDemo"), MB_OK | MB_ICONINFORMATION);break;case IDM_EXIT:DestroyWindow(hwnd);break;default:return DefWindowProc(hwnd, message, wParam, lParam); }break;case WM_CREATE:break;case WM_PAINT:hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rt); EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage (0);break;default:return DefWindowProc (hwnd, message, wParam, lParam);}return 0; }運行結果;
工程;
參閱C語言中文網(wǎng)關于二級指針的講解;
http://c.biancheng.net/view/2016.html
資源和頭文件;
#include "resource.h" #include <windows.h>/ // // Menu //IDC_TWOPOINTERDEMO MENU BEGINPOPUP "&File"BEGINMENUITEM "C 二級指針 Demo", IDM_twoPointer MENUITEM "E&xit", IDM_EXITENDPOPUP "&Help"BEGINMENUITEM "&About ...", IDM_ABOUTEND END #define IDM_EXIT 10001 #define IDM_ABOUT 10002#define IDC_TWOPOINTERDEMO 10101 #define IDD_ABOUTBOX 10102 #define IDM_twoPointer 40001?
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的C语言二级指针Demo - Win32 版本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SuperMap webGIS 简易提示
- 下一篇: C++ Boost库初步使用 - 使用C