黑马程序员-IOS基础之浅谈C语言指针

C语言-指针

大家都听过“谈虎色变“这个成语故事,咱们今天讲的虽然不是老虎,但一提到指针,大家可以能会害怕起来。在学习中,也经常听到同学们说C语言除了指针,其他的我都会。我觉得吧如果指针你不弄懂的话,C语言就不算会。那么接下来我们就来了解一下,什么是指针
     大家先看一道题:
     
#include <stdio.h>

void change(int);

int main()
{
    int a = 90;

    change(a);

    printf("a=%d\n", a);
    
    return 0;
} 

void change(int n)
{
    n = 10;
}
那么,我为大家画一个图,就会理解
大家觉得,a打印出来的值是多少呢?可能以前学过其他编程语言的知道,a=90,值传递嘛,对吧。那如果我硬是要去修改a的数值呢?所以这个时候,我们就要用到指针。

接下来,我们言归正传

指针是C语言中最强大的工具之一,它也是最容易令人困惑的主题,所以一定要在开始时正确理解。
请看下面的语句:
int number = 5;
这条语句会分配一块内存来存储一个整数,使用number名称可以访问这个整数。值5存储在这个区域中。计算机用一个地址引用这个区域。存储这个数据的地址取决于所使用的计算机、操作系统和编译器。在源程序中,这个变量是固定不变的,但地址在不同的系统上是不同的。
可以存储地址的变量称为指针(pointers),存储在指针中的地址通常是另外一个变量,如下图,指针pnumber含有另外一个变量number的地址,变量number是一个值为99的整数变量。存储在pnumber中的地址是number第一个字节的地址。

指针的基本使用
      变量类型      变量名;
      格式:变量类型 *变量名;
      指针变量只能存储地址
      //定义了一个指针变量p;
      int *p; //指针变量占8个字节
      int a = 90;
      p = &a; //指针变量p指向了变量a
      *p =10;
      注:指针的作用-能够根据一个地址值,访问对应的存储空间。
      int *p; //int 就意味着指针变量p,只能指向整型变量
     
              使用注意:
      ① 指针变量的数据类型要和它指向的变量数据类型一致
      ② 指针变量只能存储地址
      ③ 指针变量未经过初始化,不要拿来间接访问其他存储空间
     demo:
int a = 10;
int *p;
p = &a;
//可以合并成
int *p = &a;

错误写法:
*p = &a;
正确写法:
p = &a;

定义指针变量时的*仅仅是一个象征,没有其它特殊含义
*p = 20; //这个时候的*的作用是,访问指向变量p指向的存储地址

指针和数组

数组名就是数组的地址,也是数组首元素的地址
      demo:
       int ages[5] = { 10, 9 ,8 67, 54};
       int *p = &ages[0];
       for(int i = 0; i < 5; i++)
       {
printf("ages[%d] = %d\n",i,*(p+1));
}
//以上是利用指针间隔访问数组元素
printf("%d\n",p[2]);// p[2]是指针当作数组访问元素

指针与字符串
char name[] = "itcast"; //放在栈中,可以修改  name[0] = 'T';
      char *name2 = "itcast"; //放在常量区,不可修改

      char name[] = "itcast"; // 'i' + 't' + 'c' + 'a' + 's' + 't' + '\0';
      char *name2 = "itcast"; //指针会指向字符串的首字符
      

注:各位技术大牛,如果发现有错误,请将指正,本人将及时更改。

--本文只代表个人见解,同时也只供C语言初学者学习,如有发现错误或者不解,请参考权威资料--

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值