当前位置:编程学习 > C/C++ >>

复习C语言中的指针

培训学习C已经过了两三年了,当初指针是简单的讲了一下,内存管理讲都没有讲.
  几年的工作下来,感觉基础越来越重要,对编程思想理解深度很有帮助.
看<C Primer Plus>,写了一段小代码来验证自己的对指针的理解是否正确
环境: gcc version 4.4.5 (Debian 4.4.5-8)

C代码 
#include <stdio.h> 
 
void s(int *i, int *j); //交换地址 
void s2(int *i, int *j); //修改内存地址指向区块的值 
void p(int i,int j); //打印值 
void pp(int *i, int *j);  //打印地址 
 
int main (int argc, char const* argv[]) 

  int i = 0,j = 1; 
  p(i,j); 
  pp(&i, &j); 
  s(&i,&j); 
  p(i,j); //值不变,i j的地址不变, 为什么不变,据我现在的理解,通过指针传过去的,能改变的只是指针所指向的内存区域,想改变指针变量的地址,我想只能在i j的本地变量的作用域内通过等号赋值的方式 
  pp(&i, &j); 
  s2(&i, &j); 
  p(i,j); 
  pp(&i, &j); //值变, i j 的地址不变 
  return 0; 

 
void s(int *i, int *j) 

  int tmp; 
  tmp = *i; 
  i = j; 
  j = &tmp; 
  printf("address change\n"); 
  p(*i,*j); 
  pp(i, j); 

 
void s2 (int *i, int *j) 

  int tmp; 
  tmp = *i; 
  *i = *j; 
  *j = tmp; 

 
void p (int i, int j) 

  printf("%d -- %d \n", i, j); 

 
void pp (int *i, int *j) 

  printf("%p -- %p \n", i, j); 


运行结果:
引用
0 -- 1
0xbfe2fccc -- 0xbfe2fcc8
address change
1 -- 0
0xbfe2fcc8 -- 0xbfe2fc9c
0 -- 1
0xbfe2fccc -- 0xbfe2fcc8
1 -- 0
0xbfe2fccc -- 0xbfe2fcc8

作者“ManGege's Blog”
 

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,