六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 35|回复: 0

复习C指针

[复制链接]

升级  34.67%

26

主题

26

主题

26

主题

秀才

Rank: 2

积分
102
 楼主| 发表于 2013-1-26 12:34:15 | 显示全部楼层 |阅读模式
培训学习C已经过了两三年了,当初指针是简单的讲了一下,内存管理讲都没有讲.
  几年的工作下来,感觉基础越来越重要,对编程思想理解深度很有帮助.
看<C Primer Plus>,写了一段小代码来验证自己的对指针的理解是否正确
环境: gcc version 4.4.5 (Debian 4.4.5-8)

#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);}

运行结果:
<div class="quote_title">引用
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表