指针——指向内存地址的变量

指针是C语言一个重要的数据类型。指针可以访问简单的数组、字符串等,它是C语言的核心所在,用好指针可以在C语言程序开发中起到事半功倍的效果。

1.什么是指针

指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。

定义指针

跟其他变量和常量一样,必须在使用之前对其进行声明。指针变量声明的一半形式为:

type *var-name;

上面type指的是指针的数据类型,它必须是一个有效的C语言数据类型,var-name为指针变量的名称。下面给出一下示例:

int *ip;         //一个整型的指针
double *dp;  //一个double的指针
float *fp;      //一个浮点型的指针
char *ch;      //一个字符型的指针

使用指针

使用指针一般会进行以下几个步骤:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。下面一个简单的例子进行说明:

#include <stdio.h>
 
int main ()
{
   int  var = 20;   /* 实际变量的声明 */
   int  *ip;        /* 指针变量的声明 */
 
   ip = &var;  /* 在指针变量中存储 var 的地址 */
 
   printf("Address of var variable: %p\n", &var  );
 
   /* 在指针变量中存储的地址 */
   printf("Address stored in ip variable: %p\n", ip );
 
   /* 使用指针访问值 */
   printf("Value of *ip variable: %d\n", *ip );
 
   return 0;
}

输出:

Address of var variable: 006FFB68
Address stored in ip variable: 006FFB68
Value of *ip variable: 20

2.数组与指针的关系

定义一个数组时,系统会在内存中为该数组分配一个储存空间,数组名就是数组在内存中的首地址,内存单元的地址就是指针,因为数组名也是一个指针

一维数组

int *p,a[5];
p=a;             //数组名也是一个指针
p=&a[0];       //也可以这样赋值,因为数组名也就是a的首地址

下面一个简单例子说明:

#include<stdio.h>

int main()
{
    int a[10];        
    int *p,i;                    //定义指针
    printf("请输入10个数:\n");
    for(i=0;i<10;i++)           //输入10个整数
    {
        scanf("%d",&a[i]);
    }
    printf("\n");
    for(p=a;p<(a+10);p++)       //利用指针输出数组中的这10个整数
    {
        printf("%d ",*p);
    }
    printf("\n");
    return 0;
}

输出:

请输入10个数:
1 2 3 4 5 6 7 8 9 1

1 2 3 4 5 6 7 8 9 1
请按任意键继续. . .

二维数组

相关推荐