指针式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\n", &var ); 11 12 /* 在指针变量中存储的地址 */ 13 printf("Address stored in ip variable: %p\n", ip ); 14 15 /* 使用指针访问值 */ 16 printf("Value of *ip variable: %d\n", *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个数:\n"); 8 for(i=0;i<10;i++) //输入10个整数 9 { 10 scanf("%d",&a[i]); 11 } 12 printf("\n"); 13 for(p=a;p<(a+10);p++) //利用指针输出数组中的这10个整数 14 { 15 printf("%d ",*p); 16 } 17 printf("\n"); 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 请按任意键继续. . .
二维数组