在實(shí)際中并不考慮這類少見的問題。我們不認(rèn)為在任何編譯器和機(jī)器上,對于小整數(shù)n, b=(b-n)+n 確實(shí)會失敗。
即使在分段式機(jī)器中,發(fā)生了編譯器存儲了某些b-n的表達(dá)式(也許是違法規(guī)則的),那么,當(dāng)表達(dá)式加上n后,b就恢復(fù)正常。
本書中的這些內(nèi)存分配程序,從1988年第一版發(fā)表以后就已廣泛應(yīng)用,當(dāng)然也存在著同樣的問題。
但是我們從未收到過在這方面失敗的報(bào)告,哪怕是一份簡單的報(bào)告(盡管有許多讀者指出在理論上它確實(shí)可能失。
我們也曾與C語言標(biāo)準(zhǔn)團(tuán)體通信,希望在將來的標(biāo)準(zhǔn)中能夠允許這個需要“b=(b-n)+n”(至少對n的某些范圍,并設(shè)n為短型數(shù)據(jù)類型)。
因?yàn)檫@樣做,看起來與現(xiàn)有的一些編譯器并沒有什么沖突。
《C數(shù)值算法》 B.1.2 單位偏移量
pmerofc 發(fā)表于 2012-05-11 23:21
回復(fù) 35# OwnWaterloo
C99和C11都特意指出了這是一種未定義行為(附錄)
究竟是出于什么深刻的原因
我也不太明白
pmerofc 發(fā)表于 2012-05-11 20:11復(fù)制代碼
- #include <stdio.h>
- int main( void )
- {
- float score[4][5],*pscore = *score ;
- for( i = 0 ; i < 4 ; i++ )
- {
- for( j = 0 ; j < 5 ; j ++ )
- scanf("%f", pscore + 5 * i + j );
- }
- /*
- 其他代碼
- */
- return 0;
- }
變異老鼠 發(fā)表于 2012-05-11 23:33
C99 7.20.3/1
... The pointer returned if the allocation
succeeds is suitably aligned so that it may be assigned to a pointer to any type of object
and then used to access such an object or an array of such objects in the space allocated
(until the space is explicitly deallocated). ...
pmerofc 發(fā)表于 2012-05-12 09:10
回復(fù) 59# 變異老鼠
malloc()應(yīng)是為一個對象分配內(nèi)存。
前者是為一個int [20]分配,后者是為一個int [4][5]分配
pmerofc 發(fā)表于 2012-05-12 09:41
回復(fù) 63# 變異老鼠
但是你引用的這段話是關(guān)于“calloc,malloc, and realloc”三個函數(shù)的,而非僅關(guān)于malloc的
所以我覺得是否存在這種可能,就是such an object(malloc) or an array of such objects(calloc)
pmerofc 發(fā)表于 2012-05-12 11:43
怎么說呢
sizeof(unsigned char)和sizeof(signed char)也沒有區(qū)別
我嘴有些笨
但我想你能明白我的意思
三月廿七 發(fā)表于 2012-05-12 15:51
void print2D(float pscore[][5])
{
for( i = 0 ; i < 4 ; i++ )
{
for( j = 0 ; j < 5 ; j ++ )
{
scanf("%f", pscore[j][]);
}
}
}
在任何地方, 我都不會用指針去訪問數(shù)組,我只用數(shù)組索引,即使是動態(tài)分配的內(nèi)存也一樣
下面2句不是針對你說的
別人喜歡一維數(shù)組、喜歡指針我不干涉,
別人也別干涉我,不要自討沒趣
三月廿七 發(fā)表于 2012-05-12 18:12
你不是說不通用嗎?
我請教你, 怎么到現(xiàn)在還沒有回復(fù)? 是不屑回復(fù)嗎?
怎么感覺像蔫了似的
我剛才試驗(yàn)了一下, 用一維數(shù)組在這個地方確實(shí)有優(yōu)勢,
我錯...
但是這種做法很蹩腳,不自然,就像 C89 必須要在行首聲明變量一樣
希望c12 能夠有所改觀
還有一種更自然的方式, 就是在堆中分配2維數(shù)組內(nèi)存...
歡迎光臨 Chinaunix (http://72891.cn/) | Powered by Discuz! X3.2 |