第十三次课----指针与变量
一、预备知识
int a = 0;
1.变量是要占据内存的。
2.内存的大小由数据类型决定。
char b = 0;//b占据1byte
3.变量名是内存的标识,用来读写内存
b = 10;//写内存
printf("%d\n",b);//读内存
4.内存是有地址的,每个字节都有一个唯一的整数作为编号, 这个整数就是地址。
二、指针的基本概念和指针常量
1.什么是指针:指针就是地址。
2.怎么获取变量的地址:取地址符号 &
int a = 10;
printf("%d\n",a);//输出a的值
printf("%d\n", &a);//输出a的地址
3.C语言中地址绑定一块内存!
int 地址绑定4byte
double 绑定8byte
char 绑定1byte
4.指针(地址)常量的写法
int a = 0;
float f = 3.14f;
double d = 3.14;
char c = 'M';
&a;&f;&d;&c;//指针常量
4 = 100;//错误,常量4不能被修改
&a = &b;//错误,&a是指针常量不能修改
int a;
int b = 10;
a = b;//a = 10;
三、指针的类型
int a = 0;//那么&a的类型名是int *
double d = 0;//那么&d的类型名是double *
char c = 0;//那么&c的类型名是char *
long long int L = 0;//那么&L的类型名long long int *
*:指针运算符
int *绑定4byte
double *绑定8byte
char *绑定1byte
四、指针变量的定义
普通变量的定义:类型名 变量名 = 初始值;
int a = 0;
指针变量的定义:类型名 变量名 = 初始值;
int * a;//int *是类型名,a是指针变量
int * b = 10;//错误,10是整型常量,不是地址常量
int c = 0;
int * d = &c;//正确
int e = 0,f = 0;
int * g = &e,h = 10,*i = &f;//指针变量i前面的*不能少,h是int型变量
五、指针变量的基本用法
int a = 0;
int * b = &a;
*b = 100;//*b是a的小名或别名,a和*b都标识同一块内存
demo1:
int main(void)
{
int a = 10;//----50
int * b;
printf("%d\n",a);//输出的是a的值10
printf("%d\n",&a);//输出a的地址
b = &a;//把a的地址赋值给指针变量b
printf("%d\n",b);//输出b存放的数据(即a的地址)
printf("%d\n",*b);//输出的是a的值10
return 0;
}
demo2:
int main(void)
{
int a = 10;//----50
int c = 20;//----100
int * b;
b = &a;//获取a的地址
* b = 50;//a = 50;
b = &c;//获取c的地址
*b = 100;//c = 100;
printf("%d\n", a);//50
printf("%d\n", c);//100
return 0;
}
demo3:
int main(void)
{
int a = 0;
int c = 20;
int d = 30;
int *b = &a;
*b = 100;//相当于a = 100;
printf("%d\n",a);//100
c = *b;//c = a;
printf("%d\n",c);//100
b = &d;
*b = 10;
printf("%d\n",d);//10
printf("%d\n", a);//100
printf("%d\n",*b);//10
return 0;
}
六、指针变量的作用
extern int e;//扩展作用域
int main(void)
{
e = 10;
return 0;
}
int e = 0;
指针变量用于扩展局部变量的作用域。
demo1:
void foo(int *p);
int main(void)
{
int a = 0;
a = 100;
foo(&a);
printf("%d\n",a);//10
return 0;
}
void foo(int *p)//扩展了a的作用域,把a的作用域从main函数扩展到foo函数
{
*p = 10;
}
demo2:
int fac(int n, int * p);//函数的声明:扩展作用域
int main(void)
{
int a = 0;
int b = 0;
fac(4,&b);
printf("%d\n",b);
return 0;
}
/*
函数的功能:求n的阶乘 n!
*/
int fac(int n,int * p)
{
int i = 0;
int sum = 1;
if (n < 1 || p == 0)
{
return -1;
}
for (i = 1; i <= n; i++)
{
sum = sum * i;
}
*p = sum;
return 0;
}
相信你们认真复习肯定能够考出好成绩!