C语言详解

时至今日, C语言仍然是计算机领域的通用语言之一,学好C语言,再学其他的语言就简单了,套路都差不多。

C 语言详解七 指针C语言中指针是一种数据类型。指针是存放数据内存单元地址计算机系统的内存拥有大量的存储单元(每个存储单元的大小为1字节),为了便于管理,必为每个存储单元编号,该编号就是存储单元的“地址”。每个存储单元拥有一个唯一的地址指针变量除了可以存放变量的地址外,还可以存放其他数据的地址,例如可以存放数组函数地址指针和指针变量指针变量定义的一般形式【格式】数据类型符 *指针变量名[=初始地址值],…;如 int a, *p = &a【功能】定义指向“数据类型符”的变量或数组的指针变量,同时为其赋初值【说明】“*”表示定义的是一个指针变量。指针变量的前面必须有“*”在定义指针变量的同时也可以定义普通变量或数组等“数据类型符”是指针变量所指向变量的数据类型,可以是任何基本数据类型,也可以是其他数据类型指针变量的定义和初始化“初始地址值”通常是“&变量名”“&数组元素”“一维数组名”,这里的变量或数组必须是已定义的在定义指针变量时,可以只给部分指针变量赋初值指针变量的初始化,除了可以是已定义变量的地址,也可以是已初始化的同类型的指针变量,也可以是NULL(空指针)指针变量初始化时,指针变量的“数据类型符”必须与其“初始地址值”中保存的数据的类型相同指针变量的一般使用给指针变量赋值【格式】指针变量 = 地址型表达式其中,“地址型表达式”即运算结果是地址型的表达式。C语言规定,变量地址只能通过取地址运算符获得,即“&”,其运算对象是变量或数组元素名,运算结果是对应变量或数组元素的地址需要注意的是,虽然地址是一个整数,但是C语言中不允许把整数看成“地址常量”所以此处的“地址型表达式”不能是整数直接使用指针变量【格式】指针变量名需要使用地址时,可以直接引用指针变量名通过指针变量引用所指向的变量【格式】*指针变量名C程序中,“*指针变量名”代表其指向的变量数组元素,其中的“*”称为指针运算符需要注意的是,这种引用方式要求指针变量必须已经定义且有值指针的基本运算取地址运算符&取地址运算符“&”的功能是取变量的地址,它是单目运算符。取地址运算符的运算对象必须是已经定义的变量数组元素,但不能是数组名(数组名本身就是地址了)。运算结果是运算对象的地址。如int a[10]; (p = a;)==(p = &a[0])意思一样。&*a==a;(!错)*&a,&a已经是地址了指针运算符*指针运算符“*”的功能是取指针变量所指向地址中的内容与取地址运算符“&”的运算是互逆的它是单目运算符。指针运算符的运算对象必须是地址,可以是已赋值的指针变量,也可以是变量或数组元素的地址,但不能是整数,也不能是非地址型的变量运算结果就是地址对应的变量;指针的声明和引用是两回事。取地址运算符和指针运算符的优先级和结合性取地址运算符、指针运算符和自增、自减等单目运算符的优先级相同所有单目运算符的结合性为从右至左指针变量的引用例 通过指针变量访问整型变量#include <stdio.h>void main( ){ int a, b, *p1, *p2 ; a=100; b=10; p1=&a; p2=&b; printf(“a=%d, b=%d\ n”,a, b); printf(“* p1=%d, * p2=%d\ n”, *p1, * p2); printf(“&a=%x,& b=%x\ n”,&a, &b); printf(“p1=%x, p2=%x\ n”, p1, p2); printf(“& p1=%x, &p2=%x\ n”, &p1, & p2);}运行结果:a=100, b=10*p1=100, *p2=10&a=ffd4, &b=ffd6p1=ffd4, p2=ffd6&p1=ffd8, &p2=ffda指针变量作为函数参数——地址传递❖特点:共享内存,“双向”传递形参与实参变量自使用各自的空间