c语言指针与变量

                                    第十三次课----指针与变量
一、预备知识
 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;
}

相信你们认真复习肯定能够考出好成绩!

猜你喜欢

转载自blog.csdn.net/qq_41992378/article/details/82731871