1.概念
指针就是内存地址,是常量,通过直接访问内存中存储的数据
例定义一个int类型变量,代码如下:
int a = 1;
int整型变量a用于存储1,编译器会在内存中为a分配4个字节的内存空间用以存储a,
假设a的内存地址为0x0034EDCC,则0x0034EDCC就是a的指针。
注意:指针和指针变量是两个不同的变量,指针是地址,指针变量是存放地址的变量。
2.指针变量的定义
指针变量命名语法如下:
变量类型 *变量名;
“ * ”符号是指针变量的标志,变量名前面加上“ * ”就表示该变量为指针变量。
指针变量类型必须和接收的变量类型一致。
int *p ;
例如定义指针变量p,则p指向的变量必须为int型变量。
指针变量只能接收变量地址作为指针变量的值所以为指针变量赋值的方式如下:
int a;
int *p;
p = &a;
还有第二种赋值方式:
int a;
int *p = &a;
3.指针变量的引用
通过“&”符号可与直接获取变量内存地址,调用printf()函数可以直接输出变量所在的内存地址
输出地址时,以“%p”格式输出,下面是演示代码:
#include<stdio.h>
int main()
{
int a,b;
int *p_a = &a;
int *p_b = &b;
printf("*p_a = %p,&a = %p",p_a,&a);
printf("*p_b = %p,&a = %p",p_b,&b);
return 0;
}
该程序运行结果并不每次都是相同的,因为内存是随机分配的。
4.注意
- 指针变量是变量,它同样占用4个字节的内存空间
- 指针赋值时,不能写成" *p = &a ",这是因为a的地址是赋值给p的并非给*p。
- 定义指针变量时必须指定变量类型,因为没有定义类型编译器就无法确定如何读取地址中的数据。