超級詭異的c語言指標計算

來源:互聯網
上載者:User
int x = (int(*)[7])256- (int(*)[7])0;
運行後x結果為9,不知道該如何解釋?#include <stdio.h>

typedef int (*p)[7] ; // 這裡的和你的那裡其實效果一樣,只是你給出的是一個空名字類型的。
typedef p PA;

int main()
{
     int x = (PA)256 - (PA)0;

     printf("x = %d/n", x);
     return 0;
}

首先呢,你沒有明白你的程式為什麼會輸出9,
說真的,這個只是你沒有真正的理解指標,我們先來解析一下
(*)[7] :表示一個指向有 7 個元素數組的指標,
int .... : 表示這些元素的類型是int 型的。
那麼:
(int (*)[7]):表示一個指向擁有7個int型元素數組的指標 。
那麼(PA)256的類型與(PA)0類型的相減就成了 指標與指標的相減了,
指標與指標的相減與類型相關的哦。我們這裡的類型是
(int (*)[7]) 類型,只是我用 PA來表示,更加容易理解嘛!呵呵!
你看一下,那PA是多大呢?? 28 嗎? 呵呵!不對,是4
PA是一個指標,指向的是一個數組。
只是PA的類型卻是另一類,呵呵,是不是有點暈了!!
所以說,
(PA)256 也就是強制的將256轉換成了一個指向 [7] 的指標了,
那麼 [7]的大小是多少呢? 28 !!!呵呵,這次說對了,類型是int  
的嘛!!!
那麼
256/28 - 256/0 =====???多少? 9
呵呵就是這 樣子來的!
你可以試一下,你把[7]改成8,試試,你現在就猜一下嘛?我想應該是8.
也說不一定哦,試試!!!說實話 ,本人沒有看懂 :(

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.