[英]Why would you add to an address?
我正在上一個數據結構課程,我們的期中考試即將來臨,我們的期中考試實踐詢問每行是否為有效語法:
int num = 10;
int *p, *q;
p = #
q = p; //valid
*p = q; //invalid, int* cannot be assigned to int
(*p)++; //valid
&num+1; //valid ********
p++; //valid ********
因此,據我所知,最后兩行代碼將num變量的地址加1。
這在編碼中有什么目的?
在這種情況下,這將導致不確定的行為。 它可以解決內存中num
的int,但是沒有定義的方法可以知道那是什么。 但是,它是有效的語法。
如果您的指針指向數組的元素而不是標量,那將更有意義。 在這種情況下,尋址下一個int是合理的。 但是在兩種情況下,語法都是有效的。
這在編碼中的目的是編寫如下測試:
void f ( size_t length, int data[length] )
{
assert( 0 == length % 4 );
for ( int* p = data; p < data + length; p += 4 )
do_stuff_with_subarray( p, 4 );
return;
}
循環條件p < data + length
-通過將指針與數組末尾的地址進行比較來檢查指針。 取消引用該地址將是未定義的行為,但與之相比則不是。 (不過,在這個簡單的示例中,如果do_stuff_with_subarray()
讀取的數組的長度不能被4整除,則將存在UB。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.