1、指针基础函数
变量只是一段存储空间的别名,那么是否是必须经过这个别名才可使用这段存储空间?答案是否认的。咱们还能够经过指针也就是地址的方式来访问某段存储空间。spa
#include <stdio.h> int main() { int i = 5; int* p = &i; printf("%d, %08X\n", i, p); *p = 10; printf("%d, %08X\n", i, p); return 0; }
运行结果:指针
5, 0022FF48
10, 0022FF48code
二、指针的本质orm
# 指针在本质上也是一个变量内存
# 指针须要占用必定的内存空间it
# 指针用于保存内存地址的值io
不一样类型的指针占用内存空间的大小相同。class
#include <stdio.h> int main() { int i; int* pI; char* pC; float* pF; pI = &i; *((int *)0x22ff4c) = 100; printf("%0X, %0X, %d\n", pI, &i, i); printf("%d, %d, %0X\n", sizeof(int*), sizeof(pI), &pI); printf("%d, %d, %0X\n", sizeof(char*), sizeof(pC), &pC); printf("%d, %d, %0X\n", sizeof(float*), sizeof(pF), &pF); return 0; }
运行结果:基础
22FF4C, 22FF4C, 100
4, 4, 22FF48
4, 4, 22FF44
4, 4, 22FF40
程序实现的功能:一、指针占用的内存空间二、指针的地址三、经过*号写内存
*号的意义
# 在指针声明时,*号表示所声明的变量为指针
# 在指针使用时,*号表示取指针所指向的内存空间中的值。*号相似一把钥匙,经过这把钥匙能够打开内存,读取内存中的值
# “*”还表明乘号
三、传值调用与传址调用
# 指针是变量,所以能够声明指针参数
# 当一个函数内部须要改变实参的值,则须要使用指针参数
# 函数调用时实参值将复制到形参
# 指针适用于复杂数据类型做为参数的函数中
利用指针实现变量交换函数:
#include <stdio.h> #define SWAP(a, b) {int t = a; a = b; b = t;} //宏定义也能够实现变量交换 void swap(int *a, int *b) //函数定义实现变量交换 { int t = *a; *a = *b; *b = t; } int main() { int i = 1; int j = 9; printf("%d, %d \n", i, j); swap(&i, &j); printf("%d, %d\n", i, j); return 0; }
四、常量与指针
# const int *p; //p可变,p指向的内容不可变
# int const *p; //p可变,p指向的内容不可变
# int *const p; /p不可变,p指向的内容可变
# const int * const p; //p和p指向的内容都不可变
记忆口诀:左数右指
当const出如今*号左边时指针指向的数据为常量,当const出如今*后右边时指针自己为常量
指针小结:
# 指针是C语言中一种特别的变量
# 指针所保存的值是内存的地址
# 能够经过指针修改内存中的任意地址内容