这在大学课程的演讲笔记,在“呼叫按值”:

void fun(int *ip)

{

*ip =100;

}

通过被称为

int n=2;  

int *np;

np = &n; 

fun(np);
     

将n的值改变为100。

当我们说“诠释* IP”,究竟是什么,我们是什么意思?整数类型的指针?如果是这样,当我们调用的乐趣()与NP作为它的参数,不应该有一个错误NP具有n的地址,它不是整数?

然后,我们IP的值更改为100,那么难道这不是意味着是n现在有值的,在“内存插槽”与地址100?我相信,我失去了一些东西。 :)

有帮助吗?

解决方案

  

整数类型的指针?

没有,指针的整数。

  

当我们调用的乐趣()与NP作为它的参数,不应该有一个错误NP具有n的地址,它不是整数?

n是整数,所以没有问题。 &nnpip都在代码相同类型:int*

  

然后,我们IP的值更改为100

没有......我们不改变*ipip的价值。也就是说,我们改变值ip (也有时也被称为指针对象)。

其他提示

是,当使用int *作为参数类型fun的你说它接受一个指向一个int。由于np是一个指向它传递到fun一个int是确定。

np ip都指向n的地址,所以当分配像*ip = 42的值,它将的42的值分配给所述存储器位置时ip指向 - 这是n

在具有在示例代码什么被称为按指针通过。您的函数有类型的参数的指针整数。所以传递给函数的值是地址可变n的。功能受让人100到可变(即,存储位置)的指向由指针参数ip。星*引用操作在C / C ++。

在乐趣(),你并没有改变知识产权的价值为100,你就改变了在存储位置所指向的IP。

用于type*作为一种类型的装置“的指针,它指向类型”

常见的用途是int *var,但我喜欢如,使得它从dereferenceing一个指针,即int* var更好的区别将其写入作为*ptr

所以int* a装置,是一个指针,指向int类型的对象,*a表示对象指向一个和&a装置对象的地址。

认为np的类型int*的。记住,用于此目的的星号和int一起做一个“指针INT”型,并且不可分离。

ip是一个指针,与ip*你访问“存储器槽”它的指向。 np也是一个指针。使用&n分配n的内存插槽np的地址。因此调用fun()时,内部fun()该真实访问的只读存储器插槽n的一个,并因此n 100被分配。

一些混淆是可能的,因为在这里n和NP存储号码 - 然而,在编译时,编译器将不同的方式使用的数字;也就是说,当

n++;

np++;

均为实际上算术运算,生成的组件是不同的。重要的是要记住的是,最终,所有在计算机中的数据是数字。他们成为不同的类型的数据仅仅是因为我们区别对待。

具体地与问候您例如,

*np = 100;

你需要记住的是,*手段的解引用的,并且在分配之前该操作发生。它可以是具有多余括号更清楚:

(* (np) ) = 100;

或在不同的上下文:

int n = *np;

现在,我必须说,它温暖我的心脏,当你说,

  

我们IP的值更改为100,那么难道这不是意味着是n现在有值的,在“内存插槽”与地址100?   因为它掩盖了什么,我认为作为一个重要的认识。不过,我相信我是对的,当我说,你一定要去你的方式做那种事的指针了:

static_cast<int>(np) = 100;

这会做你所描述的,因为它告诉计算机处理是NP为不同类型的号码的数量;在同样的方式,将static_cast<char*>(np)治疗数NP点为一个字符,而不是作为一个整数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top