最近在老师在讲数据结构,然后发现自己的C指针内容好多都遗忘了,在此做了个总结,趁机巩固下C语言的知识。
基本指针
基本知识点归纳:
- 指针就是地址,地址就是指针。
- 指针变量就是存放地址的变量。
- 如果一个指针变量指向一个普通变量,则 *指针变量 就完全等普通变量。
- 地址就是内存单元的编号。
- 指针变量就是存放地址的变量
- 指针是一个操作受限的非负整数(只能减,不能加、乘除)
# include <stdio.h>
void main()
{
int * p; //P 存放的是整型变量的地址,int * 表示p变量存放的类型是int型的地址
// int * p; 不表示定义了一个名字为*p的int型变量
//而是这样理解:p为变量名,P 变量的数据类型是 int * 类型
// int * 类型 就是存放int变量的地址的类型
int a = 3; //p = a; error 原因:因为 a为int型 P为int *型
float b = 6.0; //P = &b; b为float &b为float*型 P为int*型 类型不同不能相互赋值
p = &a;
/*
1.p保存了a的地址,因此p指向a;
2.p不是a,a也不是p,更确切的说修改p的值不影响a的值,修改a的值不影响p的值
3.如果一个指针变量指向某个普通变量,则
*指针变量 就等价于 普通变量
例子:
如果p是个指针变量,并且p存放了普通变量a的地址,则p指向普通变量a
*p 就完全等同于 a
或者说: 在出现*p的地方都可以替换成a
在出现a的地方都可以替换成*p
*/
}
常见错误:
- 指针变量未初始化,导致修改内存中的其他值。
# include <stdio.h>
int main(void)
{
int * p ;
int i = 3;
*p = i;
printf("%d\n",*p);
return 0;
}
/*
将3赋值给以P的内容为地址的空间内,修改了p内存中保存地址的数据的值,这个地址并未申请,不能修改。
*/
- 地址错误
#