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

来源:互联网 发布:如何做采购数据分析 编辑:程序博客网 时间:2024/06/06 00:33

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
原创粉丝点击