簡體   English   中英

將整數類型轉換為指針時,整數指針分配故障

[英]Integer pointer assignment glitch while typecasting integer to pointer

#include <stdio.h>
int main (void) {

    int *a = (int *) 60;
    int *b = (int *) 40;
    printf("%lu\n", (a-b));
    printf("Integer Size = %lu\n", sizeof (int));
    printf("Pointer Size = %lu\n\n", sizeof (int *));

    char *c = (char *) 60;
    char *d = (char *) 40;
    printf("%lu\n", (c-d));
    printf("Character Size = %lu\n", sizeof (char));
    printf("Pointer   Size = %lu\n", sizeof (char *));

    return 0;
}

OUTPUT:

5
Integer Size = 4
Pointer Size = 8

20
Character Size = 1
Pointer   Size = 8

請解釋輸出。 我無法理解的是什么int * a =(int *)60; 是嗎?

int *a = (int *)60;

聲明a為指向整數的指針,並將其設置為內存位置60。

int *b = (int *)40;

聲明b為指向整數的指針,並將其設置為內存位置40。

當您對指針執行算術運算時,算術運算將以整數所指向的數據類型的大小為單位。 所以

a - b

根據它們之間的整數數量計算ab之間的差。 由於整數的大小為4個字節,地址之間的差為20個字節,因此結果為20/4 = 5

在第二段代碼中,由於它使用char而不是int ,因此指針指向1字節數據,因此減去指針與減去它們的地址相同。

通常,如果您有兩個指針

T *a;
T *b;

其中T是任何類型,則

a - b

等效於:

((char *)a - (char *)b)/sizeof(T)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM