指针:可以保存地址值(指针)的变量称为指针变量,因为指针变量中保存的是某变量的地址值。
指针的声明和使用指针的声明一般形式为:
type *var_name; 在这里,type 是指针的基类型,它必须是一个有效的 C 数据类型,var_name 是指针变量的名称。星号是用来指定一个变量是指针。声明的指针类型必须要与所指向的变量的类型一致。int *ip;
double *dp;
float *fp;
char *ch;
实例:
#include#include const int MAX = 3; int main(void) { int num = 18; int* ap; ap = # printf("Value of num= %dn", *ap); printf("Value of num= %pn", ap); printf("Value of num= %pn", &num); printf("ap 存储大小 : %lu n", sizeof(ap)); return 0; }
指针与数组:
int array[10];
1、定义一个数组array[10],该数据类型可以理解为10个整型变量的集合,那么array表示的是指向该数组的起始位置,那么array的数据类型就是“指向int的常量指针”,如果声明的是其他类型的数组名,那么数据类型就是“指向其他类型的常量指针”。
2、对数组内的元素进行访问,可以互换的使用“指针表达式”或者“下表表达式”
但是,在编程的过程中注意array的值是一个常量地址,不能被修改,也不能被作为左值去被赋值。
实例:
#include指针作为形参传递给函数:#include const int MAX = 3; int main(void) { int array[5] = {1,2,3,4,5}; int* ap; ap = array; for (int i = 0; i < 5; i++) { printf("Value of array[%d] = %dn",i,*ap); //采用指针的方式进行访问 ap++; //指针可以被赋值,每次++表示向后移动了4个字节 printf("Value of array[%d] = %dn",i,*(array + i)); //采用指针的方式进行访问,作为指针常量不能被赋值 printf("Value of array[%d] = %dn",i,array[i]); //采用下标的方式进行访问 } printf("ap 存储大小 : %lu n", sizeof(ap)); printf("array 存储大小 : %lu n", sizeof(array)); return 0; }
实例:指针作为形参传递给函数,若在函数内部指针所指向的地址的值被改变,相当于改变了函数外部实际的值,该函数传参方式为传址操作。也可以使用数组进行传址操作。
#include函数指针和回调函数:#include void swap(int* num1, int* num2) { int temp; temp = *num1; *num1 = *num2; *num2 = temp; } int main() { int num1 = 5; int num2 = 10; swap(&num1, &num2); printf("Value of num1: %dn", num1); printf("Value of num2: %dn", num2); return 0; }
#include#include float Add(float num1, float num2) { float result = num1 + num2; return result; } float Sub(float num1, float num2) { float result = num1 - num2; return result; } float mult(float num1, float num2) { float result = num1 * num2; return result; } float Div(float num1, float num2) { float result = num1 / num2; return result; } void calc(float num1, float num2, float(*pFuction)(float, float)) { float result = pFuction(num1, num2); printf("Value of Calc = %fn", result); } int main() { float num1 = 5.5; float num2 = 10.36; calc(num1,num2, Add); calc(num1, num2, Sub); calc(num1, num2, mult); calc(num1, num2, Div); return 0; }
White Board:const char* prt ,char const *prt ,char *const prt ,const char *const prt 的区别。
const char*prt :表示为定义一个指向常量的指针,可以指向常量也可以指向变量,*prt不可通过指针去修改,prt可以被改变,重新指向一个新的常量地址。(char const *prt 一样)
const char*prt = array:表示为定义一个指向char类型的常量指针,定义的时候必须被初始化,prt被const所修饰,故prt不可被修改,但可以通过指针prt去修改所指向的数据*prt。
const char*const prt = array:表示不予许prt被修改,也不予许修改prt所指向的数据。



