理解指针和局部范围

Man*_*ker 1 c c++ pointers

假设我有以下功能:

char* allocateMemory() 
{
    char str[20] = "Hello world.";
    return str;
}

int* another()
{
    int x = 5;
    return &x;
}

int _tmain(int argc, _TCHAR* argv[])
{
    char* pString = allocateMemory();
    printf("%s\n", pString);

    int* blah = another();
    printf("%d %d \n", blah, *blah);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

第一个printf打印随机值,因为str是LOCAL SCOPE.

第二个printf打印正确的值,blah =地址为blah,*blah = 5

为什么局部作用域只影响处理数组的allocateMemory,而不是整数?

为什么第一个printf(返回char*)打印随机值并受本地范围的影响,但不是第二个(返回int*)?

Sad*_*que 5

访问超出范围的方法的局部变量的两种方式是Undefined Behavior.这些是一些有效的方法:

char* allocateMemory() 
{
    char* str= malloc(sizeof(char) * 20); //assuming C
    strcpy(str, "Hello World.");
    return str; //Valid 
}

const char* allocateMemory() 
{
    return "Hello world."; //Valid Hello World is in read only location
}

int* another()
{
    int *x = malloc(sizeof(int)); //assuming C
    *x = 5;
    return x; //Valid
}
Run Code Online (Sandbox Code Playgroud)

  • `编译器不读评论.Loool.说得通. (2认同)