变量:程序中的变量只是一段存储空间的别名
指针本质:变量
int i =0;
int j =0;
int* p =&i;
j = *p;
//变量P保存着变量i的内存地址,即p == &i; *p == i
不同类型的指针占用的内存大小都是一样
#include <stdio.h>
int main()
{
int i =0;
int* pI;
char* pC;
float* pF;
pI = &i;
*pI = 10;
printf("%p, %p, %d\n",pI,&i,i);
printf("%d, %d, %p\n",sizeof(int*),sizeof(pI),&pI);
printf("%d, %d, %p\n",sizeof(char*),sizeof(pC),&pC);
printf("%d, %d, %p\n",sizeof(float*),sizeof(pF),&pF);
}
结果:
传值调用与地址调用
(1)指针是变量,因此可以声明指针参数
(2)当一个函数体内部需要改变实参的值,则需要使用指针参数
(3)函数调用时实参值将复制到形参
(4)指针适用于复杂数据类型作为参数的函数中
常量与指针
const int* p; //p可变,p指向的内容不可变
int const* p; //p可变,p指向的内容不可变
int* const p; //p不可变,p指向的内容可变,p是只读变量
const int* const p;//p和p指向的内容都不可变
口诀:左数右指
当const出现在号左边时指向的数据为常量
当const出现在号右边时指向本身为常量
总结:
(1)指针是C语言中一种特别的变量
(2)指针所保存的值是内存的地址
(3)可以通过指针修改内存中的任意地址内容