在切换/更改指向指针变量之前,我需要做什么?

时间:2015-02-23 08:14:16

标签: pointers

我不想搞砸我的内存或制造与内存相关的问题/错误。 那么..在切换/更改指向的变量指针之前我需要做什么?

或者......我做的很好吗?

这是我的源代码:

#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 个答案:

答案 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函数运行时处于活动状态。 i和z仅在循环持续时间内存活。这是变量范围如何工作的基本示例,但如果内存变得很重要,我建议您进一步查看。