C语言指针介绍其一

指针是什么?

指针是内存中一个最小单元(一个字节)的编号,也就是地址,每一个单元都有属于自己的地址。

平时我们说的指针一般说的是指针变量,用来存放内存地址的变量就叫指针变量。

指针变量

int main()
{
	int a = 10;
	int* p = &a;//p 就是一个指针变量
}

 我们可以通过&(取地址操作符)取出变量的内存地址,放在一个指针变量里。

因为 a 的类型是 int 所以是四个字节的内存,我们把第一个字节的地址放到了变量p 里。

 指针变量,用来存放地址的变量。(注意:存放在指针变量中的值都会被当成地址处理)

指针变量的大小

我们要知道32位的机器上,假设有32个地址线,这些地址线会产生1和0的信号,那么32个地址线就会产生4个G的内存来编址,如果是64位的机器就是64个地址线,那么就会有8个G的内存

我们就会明白:

32位的机器上一个地址的大小就是4个字节,存放一个地址就需要4个字节的内存

64位的机器上一个地址的大小就是8个字节,存放一个地址就需要8个字节的内存

注意区分:一个字节的内存都有唯一一个属于自己的地址编号,而不是说地址的大小就是一个字节,地址的大小是固定的。

指针类型

我们知道变量有不同的类型,那指针也是有不同的类型:

char*

int*

float*

short*

long*

.....

 可以看到指针变量的类型和变量的类型差不多,其实指针类型就是为了对应其变量的类型。

指针类型的意义

既然指针变量都是用来存放地址的,那不同的类型有什么意义吗?

指针+-整数

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);

}

 

我们看到 &n 和 pc 和 pi 的值是一样的,说明他们都取出了变量n 的第一个字节的地址,都是pc+1和pi+1的值不一样,看到他们往后走的地址数不一样,pc+1走了一个字节,pi+1走了四个字节。

这就是指针类型的其中一个意义,当指针+-整数的时候 ,决定了指针往前或者往后走一步有多大。

指针的解引用

int main()
{
	int n = 0x11223344;//这是16进值的一个数
	char* pc = (char*)&n;
	int* pi = &n;
	*pc = 0;
	*pi = 0;
}

 当我们调试看内存中的情况,执行*pc = 0时:

执行*pi = 0时:

 所以指针类型还有一个意义:

决定了指针解引用的时候有多大的权限(可以操作几个字节),比如char* 就是访问一个字节

int* 就是访问四个字节。

野指针

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

主要原因:
1.指针未初始化

2.指针越界访问

3.指针指向的空间释放了。

我们要避免野指针:

1.指针初始化

2.小心指针越界

3.将有可能野指针的指针赋值为NULL

4.避免返回局部变量的指针

5。使用之前检查有效性

相关推荐

  1. C语言通过指针访问数组元素介绍

    2024-06-07 15:48:06       49 阅读
  2. C语言指针——野指针

    2024-06-07 15:48:06       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 15:48:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 15:48:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 15:48:06       87 阅读
  4. Python语言-面向对象

    2024-06-07 15:48:06       96 阅读

热门阅读

  1. git拉取合并分支冲突解决

    2024-06-07 15:48:06       34 阅读
  2. Unity Shader基础知识的入门了解

    2024-06-07 15:48:06       30 阅读
  3. 【Android】解决AndroidStudio无法预览layout.xml的问题

    2024-06-07 15:48:06       29 阅读
  4. 云WAF的负载均衡和流量分发功能

    2024-06-07 15:48:06       33 阅读
  5. Android - RadioGroup中多个radiobutton同时被选中问题

    2024-06-07 15:48:06       30 阅读
  6. CSS -webkit-text-security

    2024-06-07 15:48:06       32 阅读
  7. PDF格式分析(八十五)——水印注释(Watermark)

    2024-06-07 15:48:06       36 阅读
  8. python 第一天

    2024-06-07 15:48:06       31 阅读