【C语言】初阶指针,超详细,含代码示例

这篇具有很好参考价值的文章主要介绍了【C语言】初阶指针,超详细,含代码示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

添加链接描述


前言

朋友们好呀,本篇文章作者将自己所学的初阶指针知识进行总结概括,超详细。指针是C语言学习过程中非常重要的一个知识点,它也是C语言的精髓所在,让我们一起来深入了解指针吧!!


一、指针到底是什么?

  1. 指针是内存中一个最小单元的编号,也就是地址

  2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量

  3. 总结:指针就是地址,口语中说的指针通常指的是指针变量

  4. 在32位的机器上,地址是32个0或者1组成二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的大小就应该是4个字节。
    那如果在64位机器上,如果有64个地址线,那一个指针变量的大小是8个字节,才能存放一个地址

5.总结:
指针是用来存放地址的,地址是唯一标示一块地址空间的。
指针的大小在32位平台是4个字节,在64位平台是8个字节。

二、指针的各种类型信息

1. 指针和指针类型

我们都知道,变量有不同的类型,整形,浮点型等。那指针有没有类型呢?
准确的说:有的。
请看下面的代码:

int num = 10;
p = #

要将&num(num的地址)保存到p中,我们知道p就是一个指针变量,那它的类型是怎样的呢?
现在就需要我们给指针变量相应的类型。

char  *pc = NULL;
int   *pi = NULL;
short *ps = NULL;
long  *pl = NULL;
float *pf = NULL;
double *pd = NULL;

这里我们就可以知道:
char* 类型的指针是为了存放 char 类型变量的地址。
short* 类型的指针是为了存放 short 类型变量的地址。
int* 类型的指针是为了存放 int 类型变量的地址。
以此类推!


2. 指针±整数

指针也是可以进行各种运算操作的,大家请看:

#include <stdio.h>
int main()
{
 int n = 10;
 char *pc = (char*)&n;
 int *pi = &n;
 
 printf("%p\n", &n);
 printf("%p\n", pc);
 printf("%p\n", pc+1);
 printf("%p\n", pi);
 printf("%p\n", pi+1);
 return  0;
}

总结:指针的类型决定了指针向前或者向后走一步有多大(距离)。

3. 指针的解引用

我们用指针保存了变量的地址后,就需要用解引用’*‘操作符对其保存的地址所对应的变量进行操作
请看下面的代码:

#include <stdio.h>
int main()
{
 int n = 0x11223344;
 char *pc = (char *)&n;
 int *pi = &n;
 *pc = 0;   //Pi是char*类型的指针变量,所以它可以操作1个字节的内存空间
 *pi = 0;   //Pi是int*类型的指针变量,所以它可以操作4个字节的内存空间
 return 0;
}

总结:
指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。
比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。

4. 野指针

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
我们不能对野指针进行操作,因为它所指向的空间的使用权不在我们手中,强行操作会报错或者对电脑造成危害!

野指针成因:

  1. 指针未初始化,局部的指针变量未初始化就是随机值
  2. 指针越界访问,这种情况主要会出现在数组中(当指针指向的范围超出数组arr的范围时,p就是野指针)
  3. 指针指向的空间释放,指向的空间已经被释放,但是我们还强行对该地址进行操作就会造成野指针异常

如何规避野指针:
4. 指针初始化
5. 小心指针越界
6. 指针指向空间释放即使置NULL
7. 避免返回局部变量的地址
8. 指针使用之前检查有效性

5.指针的运算之指针-指针

我们一定要清楚:指针减指针的结果是:这两个指针所指向空间之间相差的元素(空间)个数(相减为负数了就取绝对值),一定要清楚这一点
例如请看下面的代码:

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int len = &arr[9] - &arr[0];
	printf("%d\n", len);
	return 0;
}

运行结果如下:
【C语言】初阶指针,超详细,含代码示例,c语言,c++
第10个元素的地址减第一个元素的地址就是他们之间相差的元素个数,为9!!!

6.指针和指针的比较关系

标准规定:
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较

7.二级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?
这就是 二级指针
例如:

int main()
{
	int a=10;//普通整型变量
	int* p = &a;//一级整型指针
	int** pp = &p;//二级整型指针
	printf("%d\n", *(*pp));//10
	return 0;

}

同样,还有三级、四级等等级的指针

总结

今天分享总结的初阶指针就是这些内容啦,博主后面还会更新一篇关于进阶指针的详细文章,将对指针进行更加深入的分析理解,大家喜欢的话可以关注后续呀,谢谢大家观看!!!文章来源地址https://www.toymoban.com/news/detail-637346.html

到了这里,关于【C语言】初阶指针,超详细,含代码示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】初阶指针(指针及其类型以及野指针)

    简单不先于复杂,而是在复杂之后。 目录 1. 指针是什么? 2. 指针和指针类型  2.1  指针+-整数 2.2 指针的解引用  3. 野指针  3.1 野指针成因  3.2 如何规避野指针  指针理解的两个要点: 1. 指针是内存中最小单元的编号,也就是地址。 2. 平时口语中说的指针,通常指的是指

    2023年04月16日
    浏览(52)
  • C语言——指针详解(初阶)

    在C语言学习过程中,指针算一个难点。我总结所学的指针知识,写一篇博客,希望大家对指针的知识理解的更通透。 每个内存都有一个唯一的编号,这个编号也被称为地址,C语言创建变量。都要在内存上开辟空间。 编号= = 地址 = =指针 我们可以通过(取地址操作符)取出变

    2024年02月16日
    浏览(40)
  • 初阶C语言-指针

    🌞 . ◡̈ ᴴᴬᵛᴱ ᴬ ᴳᴼᴼᴰ ᵀᴵᴹᴱ我们终会上岸,无论去到哪里都是阳光万里,鲜花灿烂 ₍ᐢ •⌄• ᐢ₎ 今天我们一起学习一下指针的相关内容吧! 📖指针是什么呢? 1.指针是内存中的一个最小单元的编号,也就是地址。 2.平时口语中说的指针就是指针变量,是用

    2024年02月12日
    浏览(40)
  • 【C语言】指针----初阶

    💓 博客主页:江池俊的博客 ⏩ 收录专栏:C语言初阶之路 🎉如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 一、指针是什么? 1.1指针与内存间的关系 内存 1.2指针变量存放地址 二、指针和指针类型 2.1指针有哪些类型? 2.2指针类型的意义是

    2024年02月15日
    浏览(36)
  • C语言——指针初阶

     哈喽,大家好,今天我们来学习C语言中的指针,今天主要学习初阶指针,后期我们将继续学习指针进阶。 目录 1. 指针是什么 2. 指针和指针类型 2.1 指针+-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针+-整数 4.2 指针-指针 4.3 指针的关

    2024年02月05日
    浏览(79)
  • 【C语言】指针初阶

     哈喽,大家好,今天我们来学习C语言中的指针,今天主要学习初阶指针,后期我们将继续学习指针进阶。 目录 1. 指针是什么 2. 指针和指针类型 2.1 指针+-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针+-整数 4.2 指针-指针 4.3 指针的关

    2024年02月09日
    浏览(42)
  • 初阶C语言——指针

    Hello,我们又见面了,时间过的好快啊,转眼间也已经写了这么多份博客了,在接下来的一年里,小编也会认真学习的敲代码,我们一起进步,那今天开始讲我们的指针,指针这一章节在C语言的学习中是比较难的一章节,废话不多说,开始我们的学习吧。 1. 指针是什么? 指

    2024年02月13日
    浏览(44)
  • 【C语言】初阶指针

    指针是一种用来存储变量地址的变量类型。它可以指向任何数据类型,包括基本数据类型(如整数、字符等)和复合数据类型(如数组、结构体等)。通过指针,我们可以间接地访问或修改存储在特定内存地址上的数据。 指针是内存中一个最小单元的编号,也就是地址。 平

    2024年02月12日
    浏览(39)
  • C语言指针(初阶)

    嘻嘻,家人们,今天咱们剖析一下指针,好啦,废话不多讲,开干! 假设有一栋宿舍楼,把uu们放在楼里面,楼上有100个房间,但是房间没有编号,此时如果uu们的朋友来找uu们玩的话,就得挨个房间去找,这样子的话,效率很低,但是如果我们根据每个楼层与楼层的放假情况,给每个房间进行编号

    2024年02月20日
    浏览(46)
  • c语言初阶指针

    目录 何为指针 地址大小 野指针 成因   如何规避  有效性 指针计算 +-整数 ​编辑  指针比较运算 指针-指针 ​编辑 数组与指针关系 二级指针 指针数组 应用  指针就是 指针变量 ,用来存放内存空间的一个编号,将指针比作我们宾馆的客人,内存空间就是一个个的房间,

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包