08--指针

指针

指针是什么

  • 通过地址能找到所需的变量单元,可以说,地址指向该变量单元;

  • 举个例子:一个房间的门口挂了一个房间号为2008,这个2008就是房间的地址,或者说,2008指向该房间;

  • 因此,将地址形象化地称为“指针”,意思是通过它能找到以它为地址的内存单元。

  • 在C语言中,数据是分类型的,对不同类型的数据,在内存中分配的存储单元大小(字节数)和存储方式是不要的。(如整数以补码形式存放,实数以指数形式存放)

  • 为了有效地存取数据,除了需要位置信息之外,还需要有该数据的类型信息。

  • C语言中的地址包括位置信息(内存编号,或称纯地址)和它所指向的数据的类型信息。

  • 对变量的访问都是通过地址进行的。

  • 直接访问:直接按变量名进行的访问

  • 间接访问:将变量i的地址存放在另一变量中,然后通过该变量来找到变量i的地址,从而访问i变量。

指针变量

  • 有一个变量专门用来存放另一变量的地址(即指针),则称为“指针变量”

  • 指针变量就是地址变量,用来存放地址

  • 指针变量的值是地址(即指针)

  • 指针是一个地址;指针变量是存放地址的变量

指针变量的定义

类型名 *指针变量名

如:int *pointer_1 ;

其中,int 是在定义指针变量时必须指定的“基类型”;在定义指针变量时必须指定基类型;

在说明变量类型时不能一般地说“a是一个指针变量”,而应完整的说“a是指向整型数据的指针变量”;

引用指针变量

  1. 给指针变量赋值 p = &a;

  2. 引用指针变量指向的变量

    如果已经执行了 p = &a; 则 printf("%d",* p); 作用 是以整数形式输出指针变量p所指向的变量的值

  3. 引用指针变量的值

    如:printf(“%o”,p); 以八进制数形式输出指针变量p的值,如果p指向了a,就是输出了a的地址,即&a;

    • & 取地址运算符。 &a 是变量a的地址

    • ※ 指针运算符(或称“间接访问”运算符),*p代表指针变量p指向的对象

通过指针引用数组

  • 所谓数组元素的指针就是数组元素的地址

  • 程序中的数组名不代表整个数组,只代表数组首元素的地址

  • P + 1 指向同一数组中的下一个元素

  • P - 1 指向同一数组中的上一个元素

  • p2 - p1 就可知道它们所指元素的相对元素

  • 两个地址不能相加,如 p1 + p2 是无实际意义的

通过指针引用数组元素

1、下标法 如a [ i ] 形式;

2、指针法 如* (a + i)或 * (p + i)其中a是数组名,p是指向数组元素的指针变量,其初值是 p = a;

# include<stdio.h>
int main()
{
    int a[10];
    int * p,i;
    printf("请输入是十个数:");
    for(i = 0; i < 10;i++ )
    {
        scanf("%d",&a[i]);
    }
    for(p = a;p < (a + 10);p++)
    {
        printf("%d",*p); //指针指向当前数组元素
    }
    printf("\n");
    return 0;
}

通过指针引用字符串

# include <stdio.h>
int main()
{
    char    *string = " I LOVE YOU!";
    printf("%s\n",string);
    return 0;
}
  • C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放该字符串常量,但是这个字符数组没有名字的,因此不能通过数组名来引用,只能通过指针变量来引用。

  • C语言中只有字符变量,没有字符串变量

发布了16 篇原创文章 · 获赞 2 · 访问量 133

猜你喜欢

转载自blog.csdn.net/weixin_42248871/article/details/105203301