C语言进阶-1.指针基础

1.指针的介绍

1.1指针的作用

  C语言的一种数据类型。可用于表示一些复杂的数据结构。方便表示一些字符串和数组。可用于参数传递等。

1.2指针与指针变量

1.2.1变量的地址:

例:定义变量: int a=10;此时可以通过&a获得a的地址(int----4个字节)。

系统分配存储单元,存储单元可能占一定的字节数。

内存单元以字节为单位,内存中的每个字节都对应一个地址,通过地址才能找到每个字节。

&a以第一个内存单元的地址为准(高的---首地址)。

C语言进阶-1.指针基础_第1张图片

1.2.2指针引入

&-----获得变量的地址。

将a的地址存到另外一个变量中?如下图中的变量b

C语言进阶-1.指针基础_第2张图片

 变量b=&a,则变量b成为指针变量;而指针就是存的那个地址,即&a是a的地址,&a指向了变量a。(这里有点绕)这样通过变量地址可以找到变量。

1.2.3指针变量的定义

例:

int a=10;

int *p=&a;

*------指针运算符

p-----指针变量(相当于上图中的变量b)

p里面存储的是变量a的地址。

注意:指针就是一个地址!!!

     定义一个存放变量地址的变量就是一个指针变量。指针变量是一个变量,会分配内存空间,而指针本身不会分配内存空间。

1.2.4总结

  变量的地址称为指针。

  用于存储指针(即变量的地址)的变量叫指针变量;指针变量的值就是变量的地址,也就是指针。

 1.3指针定义与初始化

1.3.1.指针的定义

格式: 类型说明符 *指针变量名;-----------定义一个指针变量。

   类型说明符表示本指针(&a)所指向的变量(变量a)的数据类型

  例:

     int a=10;

     int *p=&a;

int a=10;
   /**
    * 定义指针变量p1(也可以简称为定义指针p1,但p1实际本身是一个指针变量。),但要清楚指针变量与指针是不同的概念。
    * 指针指向一个整型变量
    */
    int *p1=&a;
    char ch='c';
    /* 定义指针p2,指针指向一个字符变量*/
    char *p2=&ch;

指针变量占有的空间大小:

  /* 指针变量占据的空间大小*/
    printf("p1=>size:%d p2=>size:%d\n", sizeof(p1), sizeof(p2));

运行结果:

p1=>size:4 p2=>size:4

只要是指针变量就是占据4个字节。

根据指向变量的数据类型的不同,指针可以分为整型指针、字符型指针、浮点型指针、数组指针和其他数据类型指针。

1.3.2变量的直接访问和变量的间接访问

还是以下面这串代码为例:

int a=10;
   /**
    * 定义指针变量p1(也可以简称为定义指针p1,但p1实际本身是一个指针变量。),但要清楚指针变量与指针是不同的概念。
    * 指针指向一个整型变量
    */
    int *p1=&a;
    char ch='c';
    /* 定义指针p2,指针指向一个字符变量*/
    char *p2=&ch;

1.3.2.1变量的直接访问

1.直接修改

a=20;
ch='c';
 /* 直接访问*/
    printf("a=%d ch=%c\n",a,ch);

运行结果:

a=20 ch=c

1.3.2.2变量的间接访问

2.通过指针间接修改

*p1=30;
*p2='A';

   

	/*间接访问*/ 
	printf("a=%d ch=%c\n",*p1,*p2);

运行结果:

a=30 ch='A'

通过指针去访问其所指向变量的值。

1.3.3指针的初始化

1.初始化为NULL

  指针变量=NULL;

  例:

    *p=NULL

称为空指针,它不指向任何变量。

指针定义后不进行初始化会产生“野指针”。

2.初始化为某个变量的地址

例:

  指针变量=&变量。

 &为取地址运算符,用于获取变量的地址。

3.定义的同时进行初始化

  类型说明符 *指针变量=NULL

 类型说明符 *指针变量=&变量

  指针变量专门用于存放地址,不能将其他任何非地址类型的数据赋给一个指针变量。一个指针只能指向统一做类型的变量。

1.3.4示例

1.

printf("&a=%p &a=%p\n",&a,p1);/*输出变量的地址*/

用%p来输出地址

输出结果:

&a:0xbff8dbcc &a:0xbff8dbcc

你可能感兴趣的:(c语言,数据结构,开发语言)