开发者社区> 问答> 正文

iOS 中的指针和 C 中的指针有什么区别?

c:
int *a = 2;
printf("%d",*a) -> 2

oc:
int *a = 2;
printf("%d",a) -> 2

是我记错了吗?还是真的不同

展开
收起
a123456678 2016-07-28 10:21:29 2486 0
3 条回答
写回答
取消 提交回答
  • 宇宙虽有其起源,却没有终结。无限。 星球虽也有起源,却因其自身之力走向毁灭。有限。

    首先,没不同。
    其次,你的题目中的代码应该是写的和想的有问题的:
    int *a = 2; 这行的意思是创建int指针a,指针指向0x2这个地址。
    按照你的题目的想法,正确的写法是:

    int v = 2;
    int *a = &v;

    所以,你oc那段代码 printf("%d",a) -> 2,输出的是a指向的地址,所以是2
    而c那段,printf("%d",*a) -> 2,输出的是0x2这个地址的内容,一般而言,很多操作系统对程序的这个范围内的地址的访问会发生段错误,如果你能输出2且没错误,只能说这个进程的0x2这个地址没被保护可以访问,且内容正好是2而已。

    2019-07-17 20:01:06
    赞同 展开评论 打赏
  • iOS指针限制在app沙盒里的内存地址,C中的指针可以指向任何地址
    2019-07-17 20:01:06
    赞同 展开评论 打赏
  • 没有区别,指针就是一个指向地址的变量。

    2019-07-17 20:01:06
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
手淘iOS性能优化探索 立即下载
From Java/Android to Swift iOS 立即下载
深入剖析iOS性能优化 立即下载