指针参数传递1、指针作为参数传递进去的仅仅只是指针的值,而不是指针的地址,或者说只是指针的一份拷贝,例如: void pointer(int *p) { int a = 11; printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p); *p =11; printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p); p = &a; printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p); } int main() { int b =22; int *p = &b; printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p); pointer(p); printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p); } the p is 0xbfd46498 , addr is -1076599652, *p is 22 the p is 0xbfd46498 , addr is -1076599680, *p is 22 the p is 0xbfd46498 , addr is -1076599680, *p is 11 the p is 0xbfd4646c , addr is -1076599680, *p is 11 the p is 0xbfd46498 , addr is -1076599652, *p is 11 1、例子中,指针p的拷贝传入了方法中(其地址变了,说明是另一变量;值和指向的内存块数据没变) 2、将p的拷贝视作p1,p1改变了其所指向的内存块的值为11 3、p1的值改变为a的地址,即p1指向a,此时p1与p分别指向不同的内存块了,不会互相影响 4、方法结束,p地址和值没变(改变的仅仅是p的拷贝p1),但是p所指向的内存块数据被p1所改变了,故*p为11 总结:传入的指针仅仅是一个拷贝,方法不会改变原指针的地址、值,但是可能会改变原指针所指向内存块的数据。
值互换的两种那个方式 void swap(int *a , int *b)//使用指针方式修改指向内存块的值, 传值方式 { |
|