嵌入式軟件開發(fā)人員通常與低級(jí)傳感器交互,并且對(duì)如何使用有符號(hào)和無符號(hào)類型有很好的理解,但是當(dāng)涉及到字符串和字符類型時(shí),許多嵌入式開發(fā)人員很容易感到困惑。例如,在定義中使用’v’和”v “,或者作為函數(shù)參數(shù)。許多開發(fā)人員會(huì)交替使用它們,但它們之間存在細(xì)微而重要的區(qū)別。
使用’’定義了char類型的字符常量。字符常量可用于修改字符串中的單個(gè)字符或定義ASCII字符等用途。例如,開發(fā)人員可能會(huì)為比較定義一個(gè)ASCII字符,如下所示:
if(data == ‘v’)
{
// do something interesting
}
另一方面,使用” ”定義了指向字符串的指針。指針無疑會(huì)使用一個(gè)整數(shù)大小的內(nèi)存來存儲(chǔ)指針,大概是2或4個(gè)字節(jié)。除了使用指針內(nèi)存之外,定義的字符串也將占用足夠的內(nèi)存來包含字符和 NULL (\n) 字符串終止符。 請(qǐng)記住,在 C 中,字符串是 char 數(shù)組。
開發(fā)人員可能會(huì)感到困惑的一個(gè)簡(jiǎn)單示例是將字符串作為參數(shù)傳遞給函數(shù),反之亦然。 例如,當(dāng)使用 printf 時(shí),以下將導(dǎo)致類型錯(cuò)誤
printf(‘\n’);
printf 期望指針不是常量字符。
‘ ’和” ”之間的真正區(qū)別歸結(jié)為這樣一個(gè)事實(shí),即‘ ’定義一個(gè)字符常量,而” ”將定義一個(gè)指向字符串的指針,而該字符串實(shí)際上是一個(gè)指向數(shù)組的指針。區(qū)別是微妙的,但嵌入式開發(fā)人員不能將兩者互換使用。