【C语言指针】深入浅出:指针与取值、数组、函数; 详细剖析:指针函数、函数指针、指针数组、数组指针、双重指针、指针与动态内存分配
立即下载
资源介绍:
深入浅出:指针与取值、数组、函数;
详细剖析:指针函数、函数指针、指针数组、数组指针、双重指针、指针与动态内存分配
个人总结要点:
本质:
地址要用指针来存储,指针是用来存储地址的!!!
重难点:
指针指向的地址,也就是指针存储的地址!!!
就像整型数据要用整型变量来存储,整型变量是用来存储整型数据的!
地址:
地址值: ptr/∑
取出地址所存的值: *a/sum;
地址所存的值的类型 : int
典例:函数指针 void(* Fun)(void)
地址值: Fun
取出地址所存的值: * Fun
地址所存的值的类型: void (即为函数类型)
Tips:
指针(*)则右边是它指向的地址的标识符(也可以称为指针变量),左边为它指向的地址所存的值的类型;
函数(Function)则右边为参数,左边为返回值;
/*
本质:
地址要用指针来存储,指针是用来存储地址值的!!!
重难点:
指针指向的地址,也就是指针存储的地址!!!
就像整型数据要用整型变量来存储,整型变量是用来存储整型数据的!
地址:
地址值: ptr/∑
取出地址所存的值: *a/sum;
地址所存的值的类型 : int
典例:函数指针 void(* Fun)(void)
地址值: Fun
取出地址所存的值: * Fun
地址所存的值的类型: void (即为函数类型)
*/
#include
int main(void)
{
int sum = 10; //定义一个指针整型变量
/*第一种写法 */
//声明一个指向整型变量的指针变量 ptr,同时将指针 ptr 指向整型变量 sum 的地址
//int* ptr = ∑
/*第二种写法 */
//ptr是一个指针变量,它存了一个地址 *ptr为取出地址所存的值 int为地址所存的值的变量类型
int* ptr; //声明一个指针变量ptr,用于存储整型变量的地址;地址所存的值是整数类型的 ,指针存的也必须是一个整型变量的地址;
ptr = ∑ //ptr是一个指针变量,指针存的就是sum的地址(&sum),这行把sum地址值取出来地址赋给指针ptr。
printf("sum的地址(值): %d\n", &sum );
printf("ptr指向的地址(值): %d\n", ptr );
printf("ptr指向的地址所存的值: %d\n", *ptr );
printf("________________________\n\n");
//指针与数组
int arr[] = {0, 1, 2};
int *ptr1;
printf("开始指针ptr1的指向地址的值: %d\n", ptr1);
printf("数组首地址:%d\n", arr);
ptr1 = arr; //给指针ptr1赋值(指向数组首地址)后,指针ptr指向(存储)的地址为数组首地址
printf("现在指针ptr1的指向地址的值: %d\n", ptr1); //打印数组arr的首地址:ptr1与指向arr的首地址,自然打印的都是首地址的值
printf("数组首地址:%d\n", arr);
//地址引用
printf("*ptr1 为取出地址所存的值:%d\n", *(ptr1 + 0)); //*(ptr1 + 0)等价于*ptr1也等价于arr[0]
printf("*(ptr1 + 1) 为取出地址所存的值:%d\n", *(ptr1 + 1)); //*(ptr1 + 1)等价于arr[1]
//再次说明ptr与arr都能代表数组首地址
ptr1[0] = 3; //测试是否能够修改第一个元素值
printf("first:%d\n", arr[0]); //发现可以,说明 ptr1[0]等价于 arr[0];
arr[0] = 4;
printf("secend%d\n", arr[0]);
//留下一个思考
int* ptr3 = 10;
printf("%d,%d", *ptr3 ,ptr3);
/*
底层机制理解:
int arr[] = {0, 1, 2};
int *ptr= arr;
声明:
声明一个指向整型数组的指针变量,指这个指针变量指向向数组的首地址
解释:
arr的首地址赋给ptr,ptr是一个整型指针,用于存储一个地址,地址存的值为整数类型
所谓的指针就是把地址所代表的值取出来 即为 (*ptr)
int代表 这个值为整型,指针指向的内容是整型;
之前说“指针存的也必须是一个整型变量的地址 ”
地址存的值的变量类型 与 指针指向的地址需要存的值变量类型 不一致则需要强制转换 :
int* ptr = (int*)malloc(sizeof(int));
*/
}