小编ins*_*ese的帖子

C中的函数参数是否始终具有相同的内存地址?

好的,所以C是按值传递,这意味着使用变量的副本而不是参数的原始变量,对吧?那么,该副本是否总是具有相同的内存地址?考虑以下代码:

void test(int *ptr) {   
    printf("&ptr: %p\n", &ptr);
    printf("ptr: %p\n", ptr);
    printf("*ptr: %d\n\n", *ptr);
}

int main() {
    int a = 1, b = 2, c = 3, d = 4, e = 5;
    test(&a);
    test(&b);
    test(&c);
    test(&d);
    test(&e);

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

我从这段代码得到的输出是这样的:

&ptr: 0x7fff70536728
ptr: 0x7fff7053674c
*ptr: 1

&ptr: 0x7fff70536728
ptr: 0x7fff70536750
*ptr: 2

&ptr: 0x7fff70536728
ptr: 0x7fff70536754
*ptr: 3

&ptr: 0x7fff70536728
ptr: 0x7fff70536758
*ptr: 4

&ptr: 0x7fff70536728
ptr: 0x7fff7053675c
*ptr: 5
Run Code Online (Sandbox Code Playgroud)

我的直觉是"不".据我所知,ptr代码块之外不存在test().那么,为什么&ptr所有五个函数调用都是一样的呢?

c parameters pointers function

6
推荐指数
1
解决办法
281
查看次数

标签 统计

c ×1

function ×1

parameters ×1

pointers ×1