指针
·指针(pointer)简介
指针是一个值为内存地址的变量(或数据对象)。
Prt_year存放的为year的地址。
·基本用法
数据类型 *指针变量名;
例如:
int *ptr_num;
char *ptr_name;
float *ptr_money;
Double *ptr_price;
注意:在头文件<stdio.h>中,NULL被定义为常量,int *ptr_num=NULL;指针的初值为空,表示指针不指向任何地址。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num=2018;
int *ptr_num = #
printf("num变量的地址是:%p\t%x\n",ptr_num,&num);
//%p指针占位符,%x 16进制占位符
return 0;
}
运行结果为:
·间接运算符
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num=2018;
int *ptr_num = #
*ptr_num=2222;//使用指针修改变量值
printf("*ptr_num对应的值为:%d",num);
return 0;
}
运行结果为:
将几种不同的操作演示一下,便于理解。
#include<stdio.h>
int main()
{
int num1, num2;//定义两个变量
int *ptr_num1, *ptr_num2;//定义两个指针变量
ptr_num1=&num1;//让ptr_num1指向num1的地址
ptr_num2=&num2;//让ptr_num2指向num2的地址
num1=1024; num2=2048;//给num1和num2赋值
//打印两个num的值和地址
printf("num1的值是:%d\tnum1的地址是:%p\n",num1,ptr_num1);
printf("num2的值是:%d\tnum2的地址是:%p\n",num2,ptr_num2);
//将变量num1的值赋个num2
num2 = num1; //也可以写成*ptr_num2 = *ptr_num1;
printf("\n\nnum1的值是:%d\tnum1的地址是:%p\n",num1,ptr_num1);
printf("num2的值是:%d\tnum2的地址是:%p\n",num2,ptr_num2);
num1=1024; num2=2048;//将num1和num2的值还原
//直接操作指针
ptr_num2 = ptr_num1;
printf("\n\nnum1的值是:%d\tnum1的地址是:%p\n",num1,ptr_num1);
printf("num2的值是:%d\tnum2的地址是:%p\n",num2,ptr_num2);
//结果num2的值没有变,但是ptr_num2指向的地址变了
*ptr_num2=9999;//给ptr_num2所指向的地址赋值
printf("\n\nnum1的值是:%d\tnum1的地址是:%p\n",num1,ptr_num1);
printf("num2的值是:%d\tnum2的地址是:%p\n",num2,ptr_num2);
//这个时候改变的为num1的值
return 0;
}
所对应的运行结果为:
小结:
1. 指针就是一个变量,用来存放另一个变量的地址。
2. 如果一个变量存储另一个对象的地址,则称该变量指向这个对象。
3. 指针变量可以赋值,指针的指向在程序的执行中可以改变。
注意:
1. 指针变量的命名规则和其他变量的命名规则一样。
2. 指针不能与现有变量同名。
3. 指针可存放C语言的任何基本数据类型、数组和其他所有高级数据结构的地址。
4. 若指针已声明为指向某种类型数据结构的地址、则它不能用于存储其他类型数据的地址。
5. 应为指针指定一个地址后,才能在语句中使用指针。