C语言入门基础第四课

学习内容

  • 指针

    定义
    类型
    指向内容
    运算
    数组与指针
    指针与函数
  • 动态分配内存

  • 结构体

  • 文件读写

  • 头文件与实现文件实例之计算器

  • 文件操作训练之字符串查找

一、指针

1.定义

  • 指针是一个变量(只存地址
  • 针变量只能指向同种数据类型的地址 ,如符型指针指向字符
    指针占据8*字节
    示例
int main(){
int a;           // 普通变量
 int *pa;     //指针变量 ,占据 8字节 
 char *pb;     //字符型指针指向字符 
 printf("pa的大小:%d\n",sizeof(pa));
printf("pa的地址:%p\n",pa);
 printf("pb的大小:%d\n",sizeof(pb));
}
输出:
pa的大小:8
pa的地址:0000000000000001
pa的大小:8

2.指针的声明

  • 初始化的语法格式:数据类型 *指针变量名 =地址表达式;
  • 指针变量在定义后被赋值的语法格式:
    指针变量名 = 地址表达式(或“&”所获得的地址);
    如:
int a;
char  b;
char *c;    //定义一个字符型指针c
int * pa;  //定义一个整型指针
c = & b;  //同一数据类型
pa =  0000000000000001;//为a的地址

1.声明一个指针时并会自动分配任何内存;2.在对指针进行访问前,指针必须初始化,或是是使它指向现有的内存,或者给它分配动态内存,否则这个指针变成野指针;3.指针的初始化实际即给指针一个合法的地址,让程序能够清楚知道指针的动向,而不至变为野指针。*

二.指针的类型

  • 指针类型的判断方法:去掉 *和变量名即指针类型
    1.一般指针
int p ;//p是一个普通的整型变量
int *p;//p是一个返回整型数据的指针
            //------p与*结合说明p是一个指针,然后与int 结合,说明指针指向的内容的类型为整型

2.数组,指针

  • p与[]结合,因其优先级高于 * ,所以p是一个数组,然后再与 * 结合,说明数组里的元素是指针类型,然后再与int结合,说明指针指向的内容是整型的。
int *p[3];

p与 * 结合说明p是一个指针,然后再与[]结合说明指针指向的内容是一个数组,然后再与int 结合,说明数组里的元素是整型。

  • p与 * 结合,说明p是一个指针,然后再与 * 结合,说明指针所指向元素是指针,然后再与int结合,说明该指针所指向的元素是整型数据
int **p;
  • p与()结合,说明是一个函数,然后进入()里分析,说明该函数有一个整型变量的参数,然后再与外面的int结合,说明函数的返回值是一个整型数据。
int p(int);
  • p与指针结合,说明p是一个指针,然后与()结合,说明指针指向的是一个函数,然后再与()里的int结合,说明函数有一个int型的参数,再与最外层的inbt 结合,说明函数的返回类型是整型。
int (*P)(int);

三.指针的指向内容

  • 指针存储的内容为变量的地址,即指针是一个指向作用,指向变量所存储的内容
int main{
int a = 5;
int *p = &a;
return 0;
}

四.指针的运算

*指针+(-)整数
*可以对指针变量p进行p++、p--、p+i等操作,所得结果也是一个指针,只是指针所指向的内存地址相比于p所指的内存地址前进或者后退了i(对应指针指向类型对应大小)个操作数。

int main(){
char a = '1';
char *p = &a;
printf("p:%p\n",p);
p++;
printf("p++之后结果:%p\n",p);
p--;
printf("p--之后结果:%p\n",p);
p+= 5;
printf("p+5之后结果:%p\n",p);
return 0 ;
}
输出:
p:000000000062FE17
p++之后结果:000000000062FE18
p--之后结果:000000000062FE17
p+5之后结果:000000000062FE1C

注:* p是一个char类型的指针,指向内存地址0062FE17处,则p++将p相邻的下一个内存地址,由于整型数据占据4个字节,因此p++

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。