请教:我不大会使用指针做程序,很多时候,周围的人都说“这用指针比较方便”,但是我不用指针也可以完成,我不了解指针到底有什么优势,请指教!
----------------解决方案--------------------------------------------------------
楼主不喜欢玩指针的话,很适合用JAVA
指针,引用一本书里的话:
千万不要忘记了,当你用一个手指指向别人的时候,你手上的另外三个手指指向了你自己.-------多疑间谍的格言
[此贴子已经被作者于2006-8-16 13:42:58编辑过]
----------------解决方案--------------------------------------------------------
不明白你们的意思
[此贴子已经被作者于2006-8-16 13:45:05编辑过]
----------------解决方案--------------------------------------------------------
二、三楼的两位高手,不要说些“莫名其妙”的话给楼主MM啊,会吓到她的啊!她吓坏了谁负责啊!
TO:楼主
反正你就强制自己用指针(当然,不是说在每个地方都用,可以找些针对指针的题目去练习),错误犯多了,学的正确的东西也就跟着多了。
----------------解决方案--------------------------------------------------------
谢谢啊!但是我想举个例子,比如说数组,可以用指针代替,但是用指针代替数组有什么方便之处吗?
我最近在练习用指针代替数组,但是总是要先用数组把程序写出来,然后再一点点改用指针代替,很麻烦而且没意义,因为我不知道指针到底好在哪,所以我不会一开始写程序就用指针。
----------------解决方案--------------------------------------------------------
引用别人的话:
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。
指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。
----------------解决方案--------------------------------------------------------
其实在函数里的数组参数,编译器都是将它退化为相同类型的指针处理的。不然怎么会有
void f(int a[10])
{ printf("&d",sizeof(a));//输出的是4,而不是10。
}
----------------解决方案--------------------------------------------------------
用指针,比如你定义一个数组一定要定义他到底有几个无素,而可以通过指针实现内存的分配,随便自己意愿到底要多少元素。我也是刚学完指针,很多题用指针也不怎么编得起来,而且错误百出。呵呵!
----------------解决方案--------------------------------------------------------
可是用指针代替数组不是也要使指针指向一个定义好的数组,而且数组的大小也必须定义
如: int *p;
int a[10];
p=a;
这样的话改变p不是也改变不了了吗,它完全与数组相同,如果说可以通过指针p去访问数组中的任意的元素的话,那不是也可以直接用数组指定就好了吗?
----------------解决方案--------------------------------------------------------
指针可以指向任何一块已经分配的存储空间。
其实,数组本身就是指针 + malloc。个人认为指针更灵活,对于许多问题的解释更清楚,有时,数组反而会让你糊涂。
但是,对于指针一定要注意,要让他指向一个分配的空间。
数组是一个较为顶层的应用,指针是一个底层的操作。顶层的操作让程序的出错概率减小,但应用起来不是很自如。
比如:
unsigned int a[10];
unsigned int *pointer = a;
a[10] = 0;
p[10] = 0;
前一行会检测出语法错误,而后一行不会。这就是顶层的好处。
同时,他也有不足。比如,你发现 a[10] 不够用了,需要 a[20],就不好办了,但你可以用 pointer + malloc/ralloc。
还有,在函数中,其实更容易看出数组的无力。
#include <stdio.h>
#include <string.h>
#define STRING_LENGTH 20
#define STRING_NUMBER 2
void Prinf(unsigned char array[], unsigned int n);
void main()
{
unsigned char str[STRING_NUMBER][STRING_LENGTH];
unsigned char ch = 'A';
unsigned int i = 0;
unsigned int j = 0;
for(i = 0; i < STRING_NUMBER; i ++)
{
for(j = 0; j < STRING_LENGTH; j ++)
str[i][j] = ch;
ch += 1;
}
Prinf(str, STRING_LENGTH * STRING_NUMBER);
while(1)
;
}
void Prinf(unsigned char array[], unsigned int n)
{
unsigned int i = 0;
for(i = 0; i < n; i ++)
{
printf("%c", array[i]);
}
printf("\n");
}
----------------解决方案--------------------------------------------------------