C语言:2026.1.18

1.野指针:指针指向位置不确定
建议对指针进行创建时,初始化为空;NULL;
形成:
(1)未初始化
(2)指针越界
(3)指针指向的空间被释放了
2.规避
(1)初始化为空,判断是否为空;
(2)避免越界
(3)指针置空,安全检查;
3.传值调用和传址调用;
传值调用:直接将值传递,形参拷贝实参的值;
传址调用:通过传递变量的地址,函数中通过指针操作的是变量本身;
!!!要想通过函数传参修改某一个变量的内容,必须传递这个变量的地址;
4.指针和一位数组;数组名的意义
(1)数组名就是首元素地址;
(2)(arr+i)=arr[i];
(3)sizeof(arr) 计算的是整个数组的大小;
(4)&arr,表示拿到整个数组的地址;
(5)其余情况,arr均表示首元素地址;
(6)arr &arr[0] &arr
arr,&arr[0] 均跳过4个字节,因为跳过一个元素
&arr,跳过的是整个数组;类型是数组指针;
5.通过指针访问数组
*(arr+i)
=arr[i]
6.一维数组传参本质
7.二级指针
8.修改二级指针指向
9.指针数组是存放指针的数组;
10.栈区内存分配:高到低
数组:低到高
11.打印字符串%s 打印地址%p;
12.字符指针变量:
char str[]="hello world" 是将常量区当中的字符串内容拷贝了一份放在字符数组
const char
str="hello world" 将常量区中字符串地址保存下来
作业:
1.野指针形成和方法
形成:
(1)未初始化
(2)指针越界
(3)指针指向的空间被释放了
规避
(1)初始化为空,判断是否为空;
(2)避免越界
(3)指针置空,安全检查;
2.传值调用和传址调用 修改整型值 修改指针指向
传值调用:直接将值传递,形参拷贝实参的值;
传址调用:通过传递变量的地址,函数中通过指针操作的是变量本身;
!!!要想通过函数传参修改某一个变量的内容,必须传递这个变量的地址;
3.指针数组 创建形式 int* arr[5]
int* parr[5]={arr1,arr2,arr3,arr4,arr5}
4.字符指针,字符串赋值给字符数组 和赋值给字符指针的区别,字符串不可修改const char*="hehe"
将一个字符串常量的首元素地址赋值给这个字符指针变量,
char str1[]="hello world";
char str2[]="hello world";
const char *str3="hello world";
const char *str4="hello world";
str1!=str2;
str3==str4;
5.二级指针;
1. 定义: char **pp ,存储一级指针的地址,用于间接操作一级指针,需两次解引用 **pp 获取最终数据,单次解引用 *pp 得到一级指针地址。
2. 赋值与使用:可指向一级字符指针( char *p="hi"; char **pp=&p; ),也可指向字符指针数组( char *arr[]={"a","b"}; char **pp=arr; );通过 *pp 可修改一级指针 p 的指向。
3. 核心特性:二级指针是普通变量,可自由赋值;一级指针作为函数参数时,需借助二级指针才能修改其指向;无法通过二级指针修改字符数组的常量地址,仅能间接操作数组内容。
4. 赋值本质:仅传递一级指针的地址,无数据拷贝,指向的字符串常量仍在只读区,直接修改会报错,指向字符数组则可修改内容。
5. 典型场景:函数内修改一级指针指向、管理多个字符串(指针数组)、创建动态二维字符数组。
6.数组和一级指针的关系,(数组传参的本质) 理解arr &arr[0] &arr的值和意义;

posted @ 2026-01-19 17:05  白白0419  阅读(2)  评论(0)    收藏  举报