栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言中的指针(学习心得)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言中的指针(学习心得)

目录

一、指针是什么?

二、指针和指针类型

(1)指针的类型决定了指针向前或向后跳过几个字节

(2)指针的类型决定了对指针解引用的时候访问几个字节

 三、规避野指针

四、指针运算

(1)指针+-整数

(2)指针-指针=指针和指针之间元素的个数

(3)指针的关系运算

五、指针和数组


一、指针是什么?

指针是内存单元中一个最小单元的编号,即地址。

口语中所说的指针是指指针变量,是用来存放内存地址的变量。

案例:

#include
int main()
{
	int a = 10;//在内存中开辟一块空间
	int* p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符
	//a变量占用4个字节的空间,这里是将a的4个字节的第一个字节的地址存放在p变量中,p就是一个指针变量
	return 0;
}

另外,在32位机器上,指针变量大小是4个字节;在64位机器上,指针变量大小是8个字节。


二、指针和指针类型
char* pc = NULL;//存放char类型变量的地址
int* pi = NULL;//存放int类型变量的地址
short* ps = NULL;//存放short类型变量的地址
long* pl = NULL;//存放long类型变量的地址
float* pf = NULL;//存放float类型变量的地址
double* pd = NULL;//存放double类型变量的地址

(1)指针的类型决定了指针向前或向后跳过几个字节

案例:

#include 
int main()
{
	int n = 10;
	char* pc = (char*)&n;
	int* pi = &n;
	printf("%pn", &n);
	printf("%pn", pc);
	printf("%pn", pc + 1);
	printf("%pn", pi);
	printf("%pn", pi + 1);
	return 0;
}
//仔细观察结果:
//000000443A2FF7F4
//000000443A2FF7F4
//000000443A2FF7F5
//000000443A2FF7F4
//000000443A2FF7F8

(2)指针的类型决定了对指针解引用的时候访问几个字节

案例:

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

 三、规避野指针

(1)指针初始化

(2)小心指针越界

(3)指针指向空间释放时置NULL

(4)避免返回局部变量的值

(5)指针使用之前检查有效性

四、指针运算

(1)指针+-整数
#define N_VALUES 5
float values[N_VALUES];
float* vp;
for (vp = &values[0]; vp < &values[N_VALUES];)
{
	*vp++ = 0;//*vp=0;vp++
}

(2)指针-指针=指针和指针之间元素的个数
int my_strlen(char *s)
{
   char *p = s;
   while(*p != '' )
       p++;
   return p-s;
}

(3)指针的关系运算
for(vp = &values[N_VALUES]; vp > &values[0];)
{
  *--vp = 0;
}

只允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较。

五、指针和数组

数组名表示的是数组首元素的地址。

案例:

#include
int main()
{
  int arr[] = {1,2,3,4,5,6,7,8,9,0};
  int *p = arr; //指针存放数组首元素的地址
  int sz = sizeof(arr)/sizeof(arr[0]);
  for(i=0; i p+%d = %pn", i, &arr[i], i, p+i);
 }
  return 0;
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934012.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号