`
jcs130
  • 浏览: 129725 次
  • 性别: Icon_minigender_1
  • 来自: Ottawa
社区版块
存档分类
最新评论

菜菜如何理解指针~~

 
阅读更多

学C语言的初学者估计是最头疼指针神马的了,大一时候的课程设计搞了半天才弄得稍微明白点~虽然我现在一直在学Java,Java里面并没有指针,习惯了各种对象的“引用”指来指去,这几天数据结构课程设计,重新再看C里面的指针,发现~其实指针并不是那么难~~

 

先来说一下Java,看下面一段代码:

 

public class TestMain {
	public static void main(String[] args) {
		CarInfo c = new CarInfo(123, 123);
		CarInfo a = c;
		c.setCarTime(23);
		System.out.println(c.getCarTime());
		System.out.println(a.getCarTime());

		int e = 100;
		int f = e;
		f++;
		System.out.println(e);
		System.out.println(f);

		String s = "123123";
		String p = s;
		p += "sassadsad";
		System.out.println(s);
		System.out.println(p);
	}
}

PS: CarInfo 是我自己创建的一个类,里面有两个数据

这段示例代码的输出结果为:

 

23

23

100

101

123123

123123sassadsad

 

 

可以看到a和c所指的是一个东西,但是下面的e和f,s和p就不是一样的了。

计算机里面所有运行的程序都是存在内存中的,程序的运行差不多就是内存中不同区域间的数据交换,而语言就是将这个交换的过程用一种比较好理解的方式表现出来~

 

CarInfo c = new CarInfo(123, 123);

 

可以靠理解为,通过new Java开辟了一个新的内存空间用来存储CarInfo对象,然后用c“指向了”这篇内存区域。

CarInfo a = c;

a本来指了c,但是因为c不是内存中的数据,所以a就也指向了c所指的内存。

但是下面的intString在Java中是数据(String比较特殊,暂且这么理解吧),所以“=”就直接赋值了,也就是说先开了一个内存区域,再把值复制到新的内存区域中去。

用一句话总结~那就是对象采用引用传递(指来指去),而数据就采用的是值传递(对于等于号来说)。

 

C语言里面没有对象啊~好吧~C语言里大部份都是值传递~就是把等于号右面的数据复制给等于号左面的。下面看一段示例代码:

#include<stdio.h>
main()
{
 int a,b;
 a=1;
 b=a;
 b++;
 printf("a=%d\n",a);
 printf("b=%d\n",b);
 getch();
}

 可以看到,我修改了b的值,但是a的值不会有改变,如果我想通过修改b来同时也修改a的话,那么就需要用指针了。

C里面定义指针要在变量名前面加一个*

比如说 Car *a;意思就是这是一个指向Car(结构体)的指针;

 

把上面的程序修改一下:

#include<stdio.h>
main()
{
 int a,*b;
 a=1;
 b=&a;
 (*b)++;
 printf("a=%d\n",a);
 printf("b=%d\n",*b);
 getch();
}

 现在输出的结果a就变成2了;

简单说明一下:&是取地址符,&a就是说获取a所指向的内存空间的地址,对~你没看错~是“指向”,可以理解为没有*

就是直接指向内存的数据~下面画一张图或许能更好理解~我们假设a=1的内存地址为12345

1是数据,所以存放在内存里,它所对应的在内存中的地址是12345,*b是个指针,它存储的是地址,通过b=&a,让b把a的地址存了下来,存在了内存地址为12346的内存区域中,同理,要是我们新建一个指向指针的指针**c ,那就把指针b的地址给c 代码就为 c=&b;这样c就把b的地址存储在了内存地址为12347的内存中,以此类推~~

 

总结一下~其实*就是个标志~有*的时候编译器就通过内存的数据找地址,没有的话就直接读内存的数据~&也是这个意思~如果有&就读取这个内存的地址,如果没有就读取这块内存的数据~

 

希望我写的这些能给刚学编程的童鞋一些小帮助,本人也是小菜一个啊~一起加油吧~

 

 

 

 

 

 

 

 

 

 

  • 大小: 16.4 KB
2
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics