C的回归基础学习4——指针(1)
前言
要认真的说的话,指针不能算是复习内容。因为当初没有系统学习过指针,所以这也算是新东西了,准备先学指针基础知识,再在复习完函数,结构体之后搞一个深层次的联动。
指针的基本概念
- 定义:C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。指针是一种保存变量地址的变量。
- 为什么要用指针(因为一直没用过,这问题一直困扰着我)
1.指针的使用使得代码共享内存数据,这样可以使程序更为快速高效;
2.某些高级结构需要指针
3.函数的调用是传值的,有时需要传址的情况(如通过被调函数修改调用函数的对象)就得请指针出马。
指针的定义与初始化
- 一句话解决定义 :<数据类型> *指针名
int *px;//定义了整型指针
char *py;//定义了字符指针
int *arr[10];//定义了10个整型指针
- 初始化:
int a;
int *p=&a;//将某一同类型变量的地址赋予p
int *q=p;//将已有的指针变量赋予q
- 指针所占的字节与类型无关,一般16位是2字节,32位是4字节,64是8字节。
指针的使用
- 取址运算&:操作对象是变量(或有名存储区
这是啥?),数组名和常量就不行 - 取内容运算*:操作对象为地址常量(如数组名)和指针变量。
- 指针使用的注意事项:一定要要先给指针变量赋值(不管初始化还是后来在定义),再给这个指针所指的内容赋值,否则可能会赋值到你想象不到的地方去。
- 针对上面一个问题,对于暂时没有指向任何东西的指针可以用NULL先行赋值,如果没有给该指针赋值,最后系统会提醒出错,而不是出现上面的情况。
指针的运算
- 指针与整数运算以及自加自减结果都为指针。
p+n,p-n,p++,p-- 分别表示下n个数据的地址,上n个数据的地址,下1个数据的地址,上1个数据的地址。 - 但是地址的变化却不是简单+1,或+n,而是(p)+ n*sizeof(*p)(字节)
- 要想表示地址+1可以用*(p+1).
- 指针相减结果是一个整数,表示两指针所指的元素在数组中相距的距离。
int a[10];
int *p1=&a[9];
int *p2=&a[6];
printf("%d",p1-p2);
//结果是3
结语
指针的基本内容讲完了,但是实际运用其实应该还在指针与数组,函数,结构体等等的关系上。
(本文部分内容取自https://www.cnblogs.com/tongye/p/9650573.html)