c语言指针讨论,关于C语言中必须要用到指针的讨论

新手自学,只有汇编基础,学C语言学了很长时间了。

每个人都说指针是C的灵魂,指针很厉害。

可是我为什么感觉指针根本没必要存在?

f107fed8ba354df75d43169279f614c8.gif  

指针实质是变量,比如:

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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值