帶自加加這一類常會出現的錯誤

2021-06-26 20:12:52 字數 828 閱讀 6570

只能說,有些錯誤實在太隱蔽了,剛覺得自己會考慮如何更簡潔優化的寫出程式了,但是反而會因為自己的進一步而犯進一步的錯誤(但這是另人高興的錯誤是不哈哈,不能因為怕犯錯誤而不向前),例子來自經典教材

看似兩個一樣的程式,自加類常回出現這種錯覺

void twiddle1(int* xp, int * yp)

void twiddle2(int* xp, int * yp)

乍一看,都是 *xp = *xp + 2* *yp; 啊,是不是可用twiddle2來作為twiddle1的優化呢,你看,twiddle1需要6次儲存器引用,而twiddle2只需要三次,於是就優化了,

這是乙個自加類常容易被眼睛欺騙的一類錯誤,

錯誤在於如果*xp和*yp相等的話(指向同乙個位置),兩個函式就不一樣了啊,第乙個等於自身四倍,第二個等於自身三倍。

根本原因是儲存器別名引用導致的問題。

同理還有乙個程式

void swap(int* xp, int* yp)

//看似可以交換,但是如果xp,yp指向同乙個值,經過此程式後被賦值為0 了

再補乙個:

int f();

int f1()

int f2()

看著兩個函式一樣,當遇到自加加這種時,又出問題了

如有個全域性變數

int counter = 0;

int f();

int f1()

int f2()

f1 = 0 + 1 +2 +3 = 6;

f2 = 0;

哎,路漫漫其修遠兮,吾將上下而求索。。。。。

Leetcode Sum一類題目

leetcode裡有一類這樣的題目,給定乙個陣列和乙個target值,尋找陣列中的幾個數相加等於target值。1 two sum,尋找陣列中兩個數相加等於target值 2 three sum,尋找陣列中三個數相加等於target值 3 four sum,尋找陣列中四個數相加等於target值 注...

物件導向(一) 類

class class nameobject name 乙個或者幾個物件的標識 class crectanglerect 是crectangle型別的物件的名稱 crectangle 和 rect的關係就像 int 和變數a的物件一樣 int 型別名 a 物件名,變數 如果物件需要呼叫類裡面的函式,...

一 類與物件

物件的儲存細節 程式啟動,先把程式載入到 區。系統自動建立乙個類物件,載入類中的物件方法列表。當通過乙個類建立物件時,先在堆中開闢一塊儲存空間給物件p,再初始化物件的各屬性為0,最後返回乙個位址儲存到棧中 區域性變數接收 物件的第0個屬性是系統建立的isa指標,指向建立該物件的類。類方法只能類呼叫,...