乙個有趣的指標問題

2021-05-02 12:00:05 字數 761 閱讀 6516

是從網上看到的乙個例子:

struct s

{int i;

int * p;

void main()

struct s s;

int * p = &s.i;

p[0] = 4;

p[1] = 3;

s.p = p;

s.p[1] = 1;

s.p[0] = 2;

問程式會在哪一行死掉~

解答:程式執行到最後一行就會報出異常,死掉.

具體解答為:

首先需要說明的是結構體s,語句struct s s;系統會給s分配連續的兩個word的空間.

void main()

struct s s;

int * p = &s.i;

p[0] = 4; //s.i = 4;s的第乙個word的空間被寫為4.

p[1] = 3; //p[1]指向的是s.i緊接的乙個word空間,即s.p的指標空間,p[1] = 3;此處已經將指標s.p指向了記憶體0x000003處,這裡是系統的保護記憶體,不允許訪問。如果接著寫s.p[0] = ***x,程式也會死掉。

s.p = p; //此時s.p指向了p,是正常的,s的第二個word空間為p所指向的位址,即s.i的位址。

s.p[1] = 1; //修改了s的第二個word的值,即修改了指標s.p所指向的位址,使其指向了記憶體的0x00000001

s.p[0] = 2; //此處,是要訪問系統記憶體0x00000001,該訪問被禁止,程式當然會死掉。

乙個有趣的問題

今早朋友圈某人以100軟妹幣求助這樣乙個問題 概率論是學的一塌糊塗,但是突然想起類似用蒙特卡洛方法可以模擬出來概率。於是向著這100軟妹幣出發了。但是首先遇到了第乙個問題。陣列b的亂序排列感覺有點棘手。首先的第一反應是 迴圈隨機產生1 100的隨機數,判斷陣列中是否已經有該數,若已存在,則重新生成隨...

乙個有趣的SQL問題。

有朋友近來要我幫忙解決乙個 問題,問題描述 有表,表有3個字段 f1,f2,f3,其中,每個欄位中都可能出現1 9之間的9個數字,現要統計出整個表中1 9各出現的次數。如 f1 f2f311 2123 212在上例中 1 出現了4次,2 出現了4次,3 出現了1次。當然,這個 問題是要求盡可能的用 ...

有趣的乙個mysql問題

同事問道乙個有趣的mysql問題,在乙個有資料的表中,如何修改自增id值從一開始?我的第一反應就是不能無法修改,不能實現。在有表的資料中怎麼能實現自增id值從一開始,邏輯上就行不通。做個試驗 建自增表 mysql create table tb1 id int 11 not null auto in...