初始C语言3:指针

一.关键字

static       静态的   用来修饰变量和函数

1.可以修饰局部变量

2.可以修饰全局变量

3.可以修饰函数      

1.

改变了存储类型(栈区到静态区)  

但是作用域是不会改变的,要想在外部使用还是不行,但是它的值是可以改变的 

static修饰的局部变量和程序的声明的周期一样

2.修饰全局变量

全局变量是如何被找到使用的 

static修饰全局变量的时候改变了全局变量的外部链接属性

修饰后变成了内部链接属性

这时static修饰的全局变量只能在本源文件(.c)中使用,其他文件无法使用 

3.static修饰函数

函数也是具有外部链接属性的  ,被static修饰的时候也只能在本源文件内部使用,其他文件不能再使用了,和全局变量相似

二.定义常量和宏

宏不是函数,宏就相当于替换

宏一般都是大写(习惯)

函数首字母大写

三.指针

必须先理解内存

生活中:房间       编号(地址)

            内存单元   编号(地址)

内存单元的编号也被称为地址

内存存的是第一个字节的地址

int a = 10;

int* pa = &a //pa被称为指针变量

*pa=20;  //*解引用操作符

指针变量是用来存放地址的一种变量     

再指针变量的眼里就是地址,指针就是用存放地址的

指针变量是用来存放地址的,地址的存放需要多大空间,指针变量的大小就该是多大空间

32位的机器——支持32位的虚拟地址空间——产生的地址就是32bit的——需要32bit的存储空间——指针变量8个字节

64位的机器——支持64位的虚拟地址空间——产生的地址就是64bit的—— 需 要32bit的存储空间——指针变量8个字节

四.结构体

如何描述生活中的复杂对象,就需要结构体来描述生活中的复杂对象

struct Stu            //相当于图纸,不占用内存空间

{

        char name[20];

        int age;

        char sex[5];

        double score;   //成绩

};                                    //这里有分号

int main()                    //描述一个学生

{

        struct Stu s1 = {"刘海迪",21,"男",100.0};

        struct Stu s2 = { "张三",20,"女",0.0 };

        struct Stu* ps = &s1;

        printf("%s %d %s %lf\n",s1.name,s1.age,s1.sex,s1.score);

        printf("%s %d %s %lf\n", s2.name, s2.age, s2.sex, s2.score);   //.就是结构成员访问操作符         

        printf("%s %d %s %lf\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).score);

        printf("%s %d %s %lf\n", ps->name, ps->age, ps->sex, ps->score);//这两种方法等价  ->也是一种结构成员访问操作符

        return 0;

}

格式就是结构体变量.结构体成员

那指针应该如何去写呢

struct Stu* ps= &s1;

(*ps).name, (*ps).age, (*ps).sex, (*ps).score

ps->name, ps->age, ps->sex, ps->score

用箭头的就是结构体指针->结构体成员 

如果要用输入的话可以写

scanf("%s %d %s %lf",s1.name,&(s1.age),s1.sex,&(s1.score));

因为name和sex定义的是数组,数组名本来就是地址所以不用取地址符,但是其他的就要整个括起来

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值