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

Posted xduhongyun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针——指向内存地址的变量相关的知识,希望对你有一定的参考价值。

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

1.什么是指针

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

定义指针

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

type *var-name;

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

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

使用指针

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

 1 #include <stdio.h>
 2  
 3 int main ()
 4 {
 5    int  var = 20;   /* 实际变量的声明 */
 6    int  *ip;        /* 指针变量的声明 */
 7  
 8    ip = &var;  /* 在指针变量中存储 var 的地址 */
 9  
10    printf("Address of var variable: %p
", &var  );
11  
12    /* 在指针变量中存储的地址 */
13    printf("Address stored in ip variable: %p
", ip );
14  
15    /* 使用指针访问值 */
16    printf("Value of *ip variable: %d
", *ip );
17  
18    return 0;
19 }

输出:

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的首地址       

下面一个简单例子说明:

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5     int a[10];        
 6     int *p,i;                    //定义指针
 7     printf("请输入10个数:
");
 8     for(i=0;i<10;i++)           //输入10个整数
 9     {
10         scanf("%d",&a[i]);
11     }
12     printf("
");
13     for(p=a;p<(a+10);p++)       //利用指针输出数组中的这10个整数
14     {
15         printf("%d ",*p);
16     }
17     printf("
");
18     return 0;
19 }

输出:

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

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

二维数组

 

以上是关于指针——指向内存地址的变量的主要内容,如果未能解决你的问题,请参考以下文章

指针的定义

golang-指针类型

实验11——指针的基础应用

指针定义NULL后无法赋值?

"指针指向另一个内存位置 "是什么意思?

C/C++ 常量指针,指针常量指向常量的常指针详解