设置
|
登录
|
注册
首页
>
Windows API吧
>
浏览帖子
回复帖子
|
只看楼主
目前共有
15
篇帖子。
首页
上一页
1
2
【講解】點陣圖的結構
11楼
巨大八爪鱼
2016-6-24 11:25
請看下面這句話:
int *a = (int *)malloc(2 * sizeof(int));
這句代碼動態分配了8位元組的內存,然後用指針變數p保存該內存塊的首地址。然而我們知道int *型指針只能操作4位元組的內存,也就是說*a只能訪問到該內存塊的前4個位元組。
不過呢,指針可以進行加減運算,所以我們可以用*(a+1)來訪問後4個位元組。當然a[1]也是可以的。
最後free(a)釋放的是整個8位元組的內存塊,而非sizeof(int)=4位元組。
12楼
巨大八爪鱼
2016-6-24 11:33
同樣的道理,雖然BITMAPINFO結構的第二個成員bmiColors數組只有一個元素,但是我們完全可以用下面的方法搞出多個元素來:
BITMAPINFO *p = (BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER) + n * sizeof(RGBQUAD));
其中n可以為任意自然數,包括0,表示調色板中的顏色數目。
然後我們就可以使用p->bmiColors[3]這樣大於0的下標了。
最後free(p)也是釋放整個內存空間,而不是只是sizeof(BITMAPINFO)。
13楼
巨大八爪鱼
2016-6-24 11:36
所以,BITMAPINFO這個結構體類型一般不拿來直接定義變數,而是常使用其指針類型。
另外,對於之前提到的int *a,我們也可以通過強制類型轉換來一次性訪問8個位元組:
*(long long *)a
14楼
巨大八爪鱼
2016-6-24 13:54
點陣圖數據第二維長度的確定方法:使用<math.h>中的ceil函數。
#include <math.h>
#include <stdio.h>
int main(void)
{
int i, n;
for (i = 0; i < 24; i++)
{
n = (int)ceil(i / 4.0) * 4;
printf("%d: %d\n", i, n);
}
return 0;
}
【輸出】
0: 0
1: 4
2: 4
3: 4
4: 4
5: 8
6: 8
7: 8
8: 8
9: 12
10: 12
11: 12
12: 12
13: 16
14: 16
15: 16
16: 16
17: 20
18: 20
19: 20
20: 20
21: 24
22: 24
23: 24
15楼
巨大八爪鱼
2016-6-24 14:33
螢幕截圖:
https://zh.arslanbar.net/post.php?t=24202
首页
上一页
1
2
内容转换:
不转换
大陆简体
台灣正體
港澳繁體
马新简体
回复帖子
内容:
用户名:
您目前是匿名发表
验证码:
看不清?换一张
©2010-2025 Arslanbar [手机版] [
桌面版
]
除非另有声明,
本站
采用
知识共享署名-相同方式共享 3.0 Unported许可协议
进行许可。