簡單來說,foo就是習(xí)慣性用來做示例的類名或者函數(shù)方法名,指代一個沒有特定意義的實體。
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個客戶多一個朋友!專注中小微企業(yè)官網(wǎng)定制,網(wǎng)站建設(shè)、網(wǎng)站制作,塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。
就像我們想拿人舉例子,總要先起個名字,然后就喜歡用什么:張三,李四之類的。
真說意義呢?一般foo就是亂七八糟的意思,你隨便寫一個不成熟的或者不在框架內(nèi)的小類,方法,函數(shù)等,就可以用這個名,你也可以用abc這些詞代替,但是大家習(xí)慣這樣,你最好也這樣,大家都好理解。
反之,如果你要寫一個有特定意義或者功能的類,方法,函數(shù)時,使用的名稱最好跟他實現(xiàn)的功能有關(guān)聯(lián),這樣程序比較易讀。
C語言如果給函數(shù)傳遞二維數(shù)組作為參數(shù)
先看一個傳遞二維數(shù)組的例子:
編譯:
程序看著沒有任何問題,但是編譯器通不過,報錯在處理二維數(shù)組參數(shù)a的時候,類型不兼容。
C語言里面對二維數(shù)組的存儲是按照一維數(shù)組來處理的,二維數(shù)組按照行展開的方式按順序存儲,例如在上面的例子中:
二維數(shù)組a的定義:
它等同于一維數(shù)值的定義:
因為他們的空間存儲分配一樣的。
所以在利用二維數(shù)組作為參數(shù)傳遞時,必須指定二維數(shù)組的列數(shù),否則函數(shù)無法勾畫出二維數(shù)組的組織形式。只有有了列長度,通過下標(biāo)a[i][j]時才能得到正確的下標(biāo)地址,即:
我們改一下上面的額foo函數(shù)定義:
編譯運行:
這下就正常了。
參數(shù)如上所列。
我們看到,函數(shù)的參數(shù)聲明改成了:
這個聲明的含義是:
不過此時還是需要指定二維數(shù)組的列長度,不然函數(shù)內(nèi)部還是無法使用二維下標(biāo)去訪問數(shù)組:
編譯:
原因同前面方法1一致,如果要訪問二維數(shù)組,必須指定列的長度,否則無法計算出該元素的地址,a[i][j]=a [ (i-1)*COLNUM + j ],如果沒有COLNUM,那么這個地址無法計算出來。從形參的聲明來說,a就是一個指針,指向一維數(shù)組的指針,而不是一個二維數(shù)組。
這里要注意的是指針的指針,和二維數(shù)組的差異;二維數(shù)組的地址是連續(xù)的,所有成員按順序排序;而指針的指針只要求指針地址連續(xù),而不要求指針的指針地址連續(xù)。
然后作為實參傳遞時,也不能直接使用a傳遞,因為類型不匹配,必須定義新的變量p,然后把a的值賦給p,再傳遞給foo函數(shù)。
foo在C語言中經(jīng)常作為方法名或者類名,英文全稱為function object Oriented,即面向?qū)ο蠛瘮?shù)。
foo常與bar搭配,foobar又為foo-bar,其中bar是beyond all recognition的縮寫,通俗點就是無法識別,一塌糊涂的意思。?
而foo是fu的變體,fu是英語習(xí)語fuck-up的縮寫,同樣是一團糟的意思。于是,有些編程經(jīng)驗的人,應(yīng)該就已經(jīng)明白了為何如今許多編程實例所涉及的事物均被冠名為foo。
擴展資料
定義和語源——
至今約有212 個RFC中有術(shù)語'foo','bar'或'foobar'作為偽變量(metasyntactic variable)沒有任何適當(dāng)?shù)慕忉尰蚨x。
foo /foo/
1、 interj. 令人反感的術(shù)語。
2、 用于任何東西的一般的名稱,特別是程序和文件(特別是草稿文件)。
3、用于語法例釋的標(biāo)準(zhǔn)偽變量表中的第一個(bar, baz, qux, quux, corge,grault, garply, waldo, fred, plugh, xyzzy, thud). [JARGON]