欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

30分钟学会C/C++指针 (二)

程序员文章站 2023-12-21 13:19:28
...

野指针

  • 指向已经被销毁的内存
  • 指向无权访问的内存
int *p=int *)malloc(4);
free(p);		//此时沦为野指针,内存已经被销毁
int *p=(int *0X12312345*p=100//修改了操作系统的数据
cout<<*P<<endl: //指向未知
危害
野指针的内存不确定,对其他操作会导致内存的修改,导致不易察觉的BUG或者系统崩溃

避免野指针

  1. 养成指针初始化的好习惯
  int *p=NULL;
  1. 释放内存后将指针置为NULL
	free(p);
	P=NULL;
	if(p!=NULL)
	{
	//才使用p
	}
	

指针的加减法

指针 + 整数 N,表示偏移的N*sizeof(类型)

int a=100int *p=&a;
cout << p <<  , << p+2 <<endl; 
//p和p+2相差 2*sizeof(int)=8个 

char a='1'int *p=&a;
cout << p <<  , << p+2 <<endl; 
//p和p+2相差 2*sizeof(char)=2个 ,一个char占一个字节

++p,–p,指针本身的值会改变

int *p=&a;
cout << p << endl;
cout << --p << endl;
cout << p << endl;		//--后指针自身的值改变

指针 - 指针

int *p1=&a;
int *p2=&a+3;

cout << &(p2-p1)<<endl; //结果为三
cout <<unsigned)p2-unsigned)p1<<endl; //结果为12,3*sizeof(int)

一维数组

	char a[] = "1234";
	string b = "12345689";
	cout << sizeof(a) << endl;//5
	cout << sizeof(b) << endl;//32
	cout<<sizeof(1==2)<<endl;//1
	return 0;

利用指针访问数组元素

forint i=0;i<5;I++)
{
	//cout << *(p+i)<<endl;
	cout << *++p)<<endl;//p值已经改变
	cout << *(a+i)<<endl;//a为一个数组
}
类型 是否可变 可运算
数组名 不可变,它是常量 可++,- -
指针 可以变,它是变量 可++,- -

上一篇:

下一篇: