学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所指的内存。
但是下面的int和String在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
分享到:
相关推荐
粉色可爱鼠标指针~~ 希望大家喜欢~~~
指针深入理解 指针深入理解 指针深入理解
彻底理解指针,指针数组和数组指针,指针函数和函数指针.doc
深入理解C语言指针.pdf
深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入...
C语言指针理解C语言指针理解C语言指针理解
很可爱的Kitty粉色鼠标指针~~ 希望大家喜欢哦^^
有相应的例子,用图片说明,阐述了编程概念,简单易懂
深入理解C语言指针的奥秘[参考].pdf
我这不是我第一次写关于C指针的文章了,只是因为指针对于C来说太重要,而且随着自己编程经历越多,对指针的理解越多,因此有了本文。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及...
深入理解C语言指针的奥秘深入理解C语言指针的奥秘深入理解C语言指针的奥秘深入理解C语言指针的奥秘
[比较简单]可以学习到你对指针不了解不清楚的东西如:指针是一个特殊的...要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。
C语言(彻底理解指针和地址,彻底!)
9.1 1分钟彻底理解指针的概念 9.2 大话C语言指针变量 9.3 C语言指针变量的运算 9.4 数组指针(指向数组的指针) 9.5 字符串指针(指向字符串的
我知道函数指针是指向函数的指针,指针函数还是指一个函数的返回值是一个指针,但下面 的几道题还是感觉很迷惑。各位能否讲的详细点呢? (1)float(**def)[10] def是什么? (2)double*(*gh)[10] gh是什么? (3)double...
深入理解C语言指针的书签, 非常适合对指针学了个皮毛, 想深入的同学。 看完后会有很大的收获。
鼠标指针下载鼠标指针下载鼠标指针下载鼠标指针下载鼠标指针下载鼠标指针下载鼠标指针下载鼠标指针下载鼠标指针下载鼠标指针下载Yangcong WolfYangcong WolfYangcong WolfYangcong WolfYangcong WolfYangcong ...
理解指针
指针是一个特殊的变量,它里面存储的数值被解释成为... 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明
深入理解C指针,没有目录页,想看就看吧可以提高技术。