码迷,mamicode.com
首页 > 其他好文 > 详细

1-认识c指针

时间:2020-05-25 19:54:00      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:pre   根据   一个   size   声明   创建   动态内存   执行   释放   

1.指针和内存

c程序在编译后,会以三种形式使用内存

1静态/全局内存

静态声明的变量分配在这里,全局变量也使用这部分内存。这些变量在程序开始运行时分配,直到程序终止时才会消失

2.自动内存

这些变量在函数内部声明,并且在函数调用时才被创建。他们的作用域局限于函数内部,而且生命周期限制在函数的执行时间内。

3.动态内存

内存分配在堆上,可以根据需要释放,而且直到释放才会消失。指针引用分配的内存,作用域限与引用内存的指针。

如何阅读指针说明

 

1 const int *ptr;
2 #代码解读
3 1.ptr 是有个变量
4 2.ptr 是一个指针变量
5 3.ptr是一个指向整型的指针变量
6 4.ptr是一个指向常数常亮的指针变量

 

注意:指针变量所对应的是地址,而整型变量存放的是某个地址上数据

用间接引用操作符(*)接引指针

 

1 int num = 5;
2 int *ptr = #
3 printf("%d\n",*ptr);
4 #指针的接引 *ptr

 

我们也可以把接引操作符的结果用作左值。术语左值是指赋值操作符左边的操作数,所有左值都必须可以修改,因为他们会被赋值。

null的概念

任何时候都不能对NULL指针进行接引,因为它并不包含合法地址

0的含义可能随着代码的不同而含义不同

 

1 int num  = 9; 
2 int *ptr = 0;#此时的0为NULL
3 *ptr - 0;#此时的0为常数0

 

指针操作符

*                   用来声明指针

*                   用来解引指针

->                 指向指针

+                  用于指针做加法

-                   用于指针做减法

==  !=          比较两个指针

> < >= <=    比较两个指针

 

 1 int vector = {1,2,3}
 2 int * ptr = vector;
 3 printf("%d\n",*ptr);
 4 #输出的值为1
 5 ptr  += 1;
 6 printf("%d\n",*ptr);
 7 ptr  += 1;
 8 printf("%d\n",*ptr);
 9 #输出的值为1
10 ptr  += 1;
11 #输出的值为1

 

每次的指针加一,地址就加4

指针做减法

 

1 int vector = {28,41,7};
2 int *ptr = vectoe + 2;
3 printf("%d\n",*ptr);
4 #打印出的值是7;
5 ptr --;
6 printf("%d\n",*ptr);
7 #打印出的值是41;

 

ptr的每次减一,地址都会向前移动四个字节

指针相减

两个指针相减会的到两个指针的地址上的差值,可以判断数组中的元素顺序。

 

1-认识c指针

标签:pre   根据   一个   size   声明   创建   动态内存   执行   释放   

原文地址:https://www.cnblogs.com/zoutingrong/p/12926652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!