知识回顾:
1.数组的三个特点:有序、占一段连续的内存空间、数组中的元素类型相同。
2.一维数组数组名相当于单指针,二维数组数组名相当于行指针。
3.下标从0开始,下标代表偏移量。
4.sizeof:计算变量所占内存空间大小的运算符。
指针(1):
1.区分指针和指针变量
指针——地址(通常我们所说的是指针变量)
指针变量-——存放地址的变量
2.声明一个指针变量
基类型 *指针变量名
基类型:指针所指变量的数据类型
* :声明时,仅标识该变量为指针型变量,无实际意义
3.野指针
int *p; p为野指针,野指针并不是NULL指针,是指向垃圾内存的指针。
4.指针偏移
int a[10];
printf("%d %d", &a, &a + 1); ------>输出相差40
5.地址的类型是无符号整型。
6.C语言中的三种内存错误:
(1).指针未指向合法内存;
(2).scanf语句中未加&;
(3).数组越界;
7.不同类型中的比较“0”:
(1).浮点:10-5 10-6 == 0;
(2).指针:NULL == 0;
(3).字符:‘\0’ == 0;
(4).bool: Ture False;
8.指针变量赋值:
int a = 6;
(1) int *p = NULL;
p = &a;
(2) int *p = &a;
9.swap函数(3种,两错一对)
(1)swap(int *a, int *b)(错) (2)swap(int a, int b)(错) (3)swap(int *a, int *b)(正确)
{ { {
int *t; int t = a; int t;
t = a; a = b; t = *a;
a = b; b = t; *a = *b;
b = t; } *b = t;
} }
10.指针间运算
int *p = (int *)0x2000;
int *q = (int *)0x2014;
printf("%d", q - p); ----------------> 5 得出的是单元数
11.输出数组的五种方法:
(1 and 2). for(i = 0; i < alength; i ++)
printf("%d", *(a + i)); <----------------> printf("%d", a[i]);
(3 and 4). for(p = a, i = 0; i < alength; i ++)
printf("%d", *(p + 1)); <----------------> printf("%d", p[i]);
(5) for(p = 0; p < a + alength; p ++)
printf("%d", *p);
12.用指针进行数组逆序、排序。
13.const 只读
(1) int *const p1 = &a; p1 的值不能修改
(2) int const *p2 = &a; const int *p3 = &a; p2, p3 所指地址中的值不可改变,只能指向const型变量
(3) const int * const p4 = &a; p4的值不能改变,所指的地址中的值也不可改变 ,只能指向const型变量
14.大端,小端
大端 linux 高位存低地址,低位存高地址。
小端 windows 高位存高地址,低位存低地址。
15.malloc() 开辟一段固定的指定大小的内存空间
流程: malloc()——> free()——> p = NULL;
16.realloc() 动态开辟内存空间
将第一个参数所指向的内存空间扩大到第二个参数所指定的大小。
本文深入探讨了C语言中的指针概念,包括指针变量的定义与使用、野指针的理解、指针间的运算等内容,并通过实例展示了如何利用指针进行数组的操作,如逆序与排序等。

被折叠的 条评论
为什么被折叠?



