新手自学,只有汇编基础,学C语言学了很长时间了。
每个人都说指针是C的灵魂,指针很厉害。
可是我为什么感觉指针根本没必要存在?
指针实质是变量,比如:
char a[10];
char *p=a;
既然a[0]可以访问数组了,为什么一定要*p来访问呢?
难道就为了灵活一点?引入这么大的一个概念?
C我也学了很长时间了,指针我也特意加重学习时间和深度。
因为函数return只能返回一个值或者表达式。所以在需要在被调函数内改主调函数内的变量时必须要用指针(因为C的函数只能通过函数参数值传递)外,没感觉哪里一定,必定要用到他。以下程序肯定实现不了交换m,n的。
void Exchange(int, int);
void Exchange(int a, int b)
{
int c;
c = a;
a = b;
b = c;
}
int main(void)
{
int m, n;
scanf("%d %d", &m, &n);
Exchange(m, n);
printf("%d %d\n", m, n);
}
可能我目前学的太少,所以用不到,论坛上也找了关于指针的必须性的文章也没找到,还是指针这个概念已经过时了?我已经萌生去学C++的想法了。
坛友能否举几个必须要用指针的例子让我等新手解惑?
总结:
经过各位热心朋友的解答,我理出的结论。
指针是一个表示地址的变量,也就是内存地址。所以他不存在重要不重要,而是你要理解他的使用方式和表达的意思。指针就是变向的内存。下列代码也说明了这一点。
int *p;
int *p1;
p = &a;
000B13FD 8D 45 F4 lea eax,[a]
000B1400 89 45 D0 mov dword ptr
,eax
p1 = &b;
000B1403 8D 45 E8 lea eax,000B1406 89 45 C4 mov dword ptr [p1],eax
printf("the sum number:%d\n", z = *p1 + *p);
000B1409 8B 45 C4 mov eax,dword ptr [p1]
000B140C 8B 08 mov ecx,dword ptr [eax]
000B140E 8B 55 D0 mov edx,dword ptr
000B1411 03 0A add ecx,dword ptr [edx]
000B1413 89 4D DC mov dword ptr [z],ecx
000B1416 8B F4 mov esi,esp
000B1418 8B 45 DC mov eax,dword ptr [z]
000B141B 50 push eax
000B141C 68 D4 59 0B 00 push 0B59D4h
000B1421 FF 15 14 91 0B 00 call dword ptr ds:[0B9114h]