簡體   English   中英

為什么要添加到地址?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM