C语言| 指针变量的初始化
C语言| 指针的优点-CSDN博客
C语言| 指针变量的定义-CSDN博客
【指针变量的初始化】
1.定义:用赋值语句,让一个指针变量得到另一个变量的地址,使它指向该变量。
2. & 取地址运算符
功能:取其内部所存变量地址,所指向变量中的内容。
指针变量只能存放地址!!!只能用&取地址,对指针变量进行初始化。
3. 举例:
int a, *b; //定义变量a, 指针变量b
b = &a; //指针变量的初始化,用&(取地址运算符)
i. 把变量a的地址,放到了指针变量b中,通过a的地址,指针变量b就能找到a的数据,所以指针变量b就指向了变量a。
ii. a和b是不同的变量,修改它们的值互不干扰。指针变量b是a的地址,b是内存单元的地址,而a是变量a里面的数据,a是内存单元的内容。[一定要区分开内存单元的地址,和内存单元的内容]
iii. int *b; //定义指针变量时,*b只是一个声明,没有其他含义。
上面 b = &a; //给指针变量初始化,当b指向a之后,*b 就完全等同于 a了,可以相互替换。
【指针常见错误】
1 引用未初始化的指针变量
未初始化的指针变量,指向的是无效地址。
只能用&取地址,对指针变量进行初始化。
使用scanf(),必须要先给指针变量初始化!!!
2 往一个存放NULL地址的指针变量里面写入数据
指针变量初始化,指向了一个NULL,这么写是错的,但是在实际编程中经常使用,因为后续还会给指针变量二次赋值。(在该指针变量指向有效地址之前,不要往该地址NULL中写入数据)
NULL指向的是内存中地址为0的内存空间。NULL是定义在stdio.h头文件中的符号常量,它表示的值是0。
【程序代码1】变量的初始化
#include <stdio.h>
int main(void)
{
int a = 10, *b; //*b 表示定义了一个指针变量b
b = &a;
printf("*b = %d\n", *b); //此时*b 完全等于a
printf("b = %d\n", b); //b里面存储的是变量a的地址
return 0;
}
/*
在VC6.0++的运行结果为
-----------------------------------------------
*b = 10
b = 1703728
-----------------------------------------------
*/
【程序代码2】指针变量之间的赋值
直接通过指针变量名进行赋值
1 指针变量的基类型,一定要相同
2 在赋值之前,赋值运算符“=”右边指针变量必须是已经初始化过的,才能进行指针变量间的赋值。
3 可以同时定义初始化指针变量。int c = 12; int *a = &c; int *b = a;
#include <stdio.h>
int main (void)
{
int *a, *b;
int c = 12;
a = &c;
b = a; //直接指针变量名之间进行赋值
printf("*b = %d\n", *b); //此时*b完全等同于c
printf("b = %d\n", b); //b里面存储的是变量c的地址
return 0;
}
/*
在VC6.0++的运行结果为
-----------------------------------------------
*b = 12
b = 1703720
-----------------------------------------------
*/