2015-02-23 81 views
0

我不想搞亂我的內存或造成與內存相關的問題/錯誤。 那麼......在切換/更改指向的變量指針之前,我需要做什麼?在切換/更改指向的指針變量之前,我需要做什麼?

或..我做的很好嗎?

這裏是我的源代碼:

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    int x = 10; 
    int y = 87; 
    int arr[5] = {1,2,3,4,5}; 

    int *ptr; 

    ptr = &x; 
    printf("Now ptr pointed to x --> *ptr = %d ~ ptr address: %p \n", *ptr, ptr); 

    ptr = &y; 
    printf("Now ptr pointed to y --> *ptr = %d ~ ptr address: %p \n", *ptr, ptr); 

    ptr = arr; 
    printf("1st 2 byte: %d \n", *ptr); 
    *ptr++; 
    printf("2nd next 2 byte: %d \n", *ptr); 
    *ptr++; 
    printf("3rd next 2 byte: %d \n", *ptr); 
    *ptr++; 
    printf("4th next 2 byte: %d \n", *ptr); 

    // Now i want to switch to x again :D 
    ptr = &x; 
    printf("Now ptr pointed to x AGAIN --> *ptr = %d ~ ptr address: %p \n", *ptr, ptr); 

    return 0; 
} 

請啓示。

謝謝

回答

1

這似乎沒有什麼問題,你有什麼。指針只是改變它指向的位置,但這些背景變量根本沒有改變。只要main函數正在運行,變量x,y和數組將處於活動狀態,因爲它們在main範圍內。如果你希望它們在更短的時間內活着,你可以將它們限制在從main調用的其他函數中。

void xVariable() 
{ 
    int x = 7; 
} 

int main() 
{ 
    int y = 8;  

    xVariable(); 

    for(int i = 0; i < 9; i++) 
    { 
     int z = 9; 
    } 

    return 0; 
} 

在這個例子中,y將在程序的整個運行中保持運行。 x只會在xVariable函數運行時處於活動狀態。我和z只在循環期間存活。這是變量作用域如何工作的一個基本例子,但如果內存變得重要,我會建議進一步查看它。

+0

您的聲明:''只要main函數正在運行,變量x,y和您的數組就會一直存在,因爲它們在主函數的範圍內''是我的一個新知識。謝謝^ _^ – 2015-02-23 08:43:19

+0

沒問題,很樂意幫忙。當試圖瞭解變量如何被訪問時,這是非常重要的,所以如果你有時間,請看[this](http://www.tutorialspoint.com/cprogramming/c_scope_rules.htm)。它應該能夠解釋比我更好的東西。 – Stevo 2015-02-23 08:46:13

+0

當我們與C中的內存進行交互時,對基礎知識的任何其他參考? – 2015-02-23 08:55:03

相關問題