C语言的灵魂---指针(基础)

简介: C语言的灵魂---指针(基础)

1.什么是指针?

这个问题我们通常解释为两种情况:

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

2.我们通常说的指针,其实是表示指针变量,是用来存放地址的变量工具;

总结:指针是指针变量用于存放变量地址的变量工具,本质是地址


2.指针的大小

指针大小这里就直接给出答案:

在32位平台,指针(地址)大小为4个字节;

在64位平台,指针(地址)大小为8个字节;


3.指针的分类

指针分类还是比较多,也相对来说比较丰富,接下来我们就一个个来了解指针的类型吧!


3.1比较常规的指针类型

char  *p = NULL;
short *p = NULL;
int   *p = NULL;
long  *p = NULL;
float *p = NULL;
double*p = NULL;


有上面的比较常见的指针类型,不难得出:指针的定义方式为---->type + *

而且这里还有个性质:

定义的type为什么类型,那么指针变量存储的相应类型的变量地址。


举个例子:

比如char*类型的指针,是为了存放char类型变量的地址

char ch='w';
char *p=&ch;
//这里&(取地址符号),是为了取出ch变量的地址;


提出疑问,指针这么多类型有什么意义呢?

回答:不同类型的指针也就有着不同的“步长”,也就是一次性访问的字节大小,比如char指针一次访问1个字节,而int类型的指针一次性就可以访问4个字节。这在C语言的底层 ,意义重大。


说道“步长”就有必要说一下指针加减整数:

这里就可以看见char类型的指针加整数1,地址变化了1个字节,而int类型的指针加1,地址变化了4个字节


3.2指针的解引用操作

#include <stdio.h>
int main()
{
 int n = 0x11223344;
 char *pc = (char *)&n;
 int *pi = &n;
 *pc = 0;   //重点在调试的过程中观察内存的变化。
 *pi = 0;   //重点在调试的过程中观察内存的变化。
 return 0;
 }


这里我们可以看到char类型的pc指针,只改变了n的第一个字节;接着往下运行

我们也容易的发现:int类型的pi指针,直接把n的4个字节都变成了0;


在个例子中,pc或者是pi如果都按整形打印,那么他们完全就是整形n的值,* +变量指针就是访问变量指针地址,若打印规定%d整形打印,他就会往后把4个字节都翻译了(翻译过程就是补码到原码的过程)

这里也是表明不同类型解引用访问的内存大小不同;


3.3野指针

概念:野指针就是指针指向的位置是不可知道的(随机的、不正确的、没有明确限制的)


野指针的成因:

1.指针未初始化;

2.指针越界访问;

3.指针指向空间释放;


4.指针运算

4.1指针加减整数

指针加减整数,也就是在原指针的基础上,增加或者减少 整数 * sizeof(type)

例如:

#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

int* p1 = arr;
int* p2 = arr + 4;

printf("p1=%p\np2=%p", p1, p2);

return 0;
}

我们可以发现p2=p1+4,相当于增加4*sizeof(int)也就是16;


4.2指针-指针

指针减指针代表的是两个地址之间的距离(两地址之间相差的元素个数(int)类型),返回的是int数据。指针和指针之间是没有相加的,相加没有意义;


总有浪漫值得奔赴!


相关文章
|
2月前
|
存储 编译器 C语言
【C语言】【指针1】指针难?看这个就够了!
【C语言】【指针1】指针难?看这个就够了!
|
21天前
|
存储 C语言
【C语言基础】一篇文章搞懂指针的基本使用
本文介绍了指针的概念及其在编程中的应用。指针本质上是内存地址,通过指针变量存储并间接访问内存中的值。定义指针变量的基本格式为 `基类型 *指针变量名`。取地址操作符`&`用于获取变量地址,取值操作符`*`用于获取地址对应的数据。指针的应用场景包括传递变量地址以实现在函数间修改值,以及通过对指针进行偏移来访问数组元素等。此外,还介绍了如何使用`malloc`动态申请堆内存,并需手动释放。
|
24天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
2月前
|
C语言
C语言------指针
这篇文章是关于C语言中指针的实训,通过示例代码展示了指针的基本概念、定义、赋值、使用和传递,以及指针运算和指针在函数参数中的应用,如交换两个变量的值和找出两个数中的较小值。
C语言------指针
|
29天前
|
存储 安全 C语言
C语言 二级指针应用场景
本文介绍了二级指针在 C 语言中的应用,
|
2月前
|
存储 编译器 C语言
【C语言篇】深入理解指针2
代码 const char* pstr = "hello world."; 特别容易让初学者以为是把字符串 hello world.放 到字符指针 pstr ⾥了,但是本质是把字符串 hello world. 首字符的地址放到了pstr中。
|
2月前
|
存储 程序员 编译器
【C语言篇】深入理解指针1
assert.h 头⽂件定义了宏 assert() ,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报错终⽌运⾏。这个宏常常被称为“断⾔”。
|
2月前
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
|
2月前
|
存储 编译器 C语言
【C语言】指针练习题目
【C语言】指针练习题目
|
2月前
|
C语言 Python
C语言指针(2)
C语言指针(2)
25 5