指针和普通变量有什么区别?
指针和普通变量有什么区别?为什么要使用指针?性能上有什么优点?
比如:int *p 和 int p有什么区别?
比如我在传参时使用&p与p有什么区别?
[解决办法]
指针和普通变量的区别,最简单的思考应该按整数的两个不同用法着眼:
整数可以表示序号和数量----数量的概念不必说了,但序号的概念人人都懂但不透彻。
2012表示年----这是序号,它的下一年是2013,即2012+1可得2013,但这里的1是什么?是公元1年吗----是序号还是数量?
2012是今年,2013是明年,两者能相加吗?序号+序号是什么?
指针是什么?指针是严格意义上的序号----存储位置的编号!
所以指针+数量为指针----成立
反之指针-指针为数量----成立
指针+指针------不成立
C和C++中源代码级对存储数据的访问有两种方法:按名字和按指针----就象在大街上按名字(类似变量名)或按门牌号(类似地址)访问商店一样。
[解决办法]
1、传递参数时:对于指针,&p传递的是指针的地址
p传递的是指针所指的变量的地址,也就是变量的地址。
2、int *p 和 int p有什么区别
int p和int *p在为函数传参时,对于int p,只传递它的副本,在函数内部改变p的值不能改变
p在函数外面的值。
而对于*p,可以通过*p=X,来改变它之前所指元素的值,函数外边的值也改变。
例如 int *p,a=4; p = &a; fn(p){*p = 5;} 则调用函数后,a=5。
[解决办法]
区别不大,主要区别在于指针变量本身都是占四个字节的内存,指针变量内存放到是指向的内存单元的地址,是unsigned int 类型的,而普通变量存放的是数据,根据不同的类型存放不同的数据。
[解决办法]
指针与数组的关系密不可分的,它可以指向数据的首地址,从而操作每个数组的元素。而它本身在win32系统上只占用四个字节。而且它可以直接对内存进行操作,效率较高。而很多变量,占用内存空间多,而且变量大多数时候不能直接对应内存地址,效率较慢。