指针
指针是什么
-
通过地址能找到所需的变量单元,可以说,地址指向该变量单元;
-
举个例子:一个房间的门口挂了一个房间号为2008,这个2008就是房间的地址,或者说,2008指向该房间;
-
因此,将地址形象化地称为“指针”,意思是通过它能找到以它为地址的内存单元。
-
在C语言中,数据是分类型的,对不同类型的数据,在内存中分配的存储单元大小(字节数)和存储方式是不要的。(如整数以补码形式存放,实数以指数形式存放)
-
为了有效地存取数据,除了需要位置信息之外,还需要有该数据的类型信息。
-
C语言中的地址包括位置信息(内存编号,或称纯地址)和它所指向的数据的类型信息。
-
对变量的访问都是通过地址进行的。
-
直接访问:直接按变量名进行的访问
-
间接访问:将变量i的地址存放在另一变量中,然后通过该变量来找到变量i的地址,从而访问i变量。
指针变量
-
有一个变量专门用来存放另一变量的地址(即指针),则称为“指针变量”
-
指针变量就是地址变量,用来存放地址
-
指针变量的值是地址(即指针)
-
指针是一个地址;指针变量是存放地址的变量
指针变量的定义
类型名 *指针变量名
如:int *pointer_1 ;
其中,int 是在定义指针变量时必须指定的“基类型”;在定义指针变量时必须指定基类型;
在说明变量类型时不能一般地说“a是一个指针变量”,而应完整的说“a是指向整型数据的指针变量”;
引用指针变量
-
给指针变量赋值 p = &a;
-
引用指针变量指向的变量
如果已经执行了 p = &a; 则 printf("%d",* p); 作用 是以整数形式输出指针变量p所指向的变量的值
-
引用指针变量的值
如: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语言中只有字符变量,没有字符串变量