C++学习笔记之指针和自由存储空间基础要点

指针

/*指针一个很大重要作用——间接改值*/
	int a = 10;
	int* pa = &a;
	*pa = 22;
	cout << "a = "<<a << endl;//此时a的值为22
	
/*无论何种类型,指针大小一般为4*/
	int *pa;//空指针,不建议,在此仅作为下面示例
	double *pb;
	//sizeof(pa)和sizeof(pb)都为4
	
/*指针赋值的时候必须强制转换*/
	int *pt;
	pt=0xB8000000;//错误
	pt=(int *)0xB8000000;//正确

new运算符

	/*new 运算符分配内存 分配一个未命名内存  下面的c地址与pc地址不同
	  new 分配的空间一般位于 *堆* 或 *自由存储区*
	  普通变量一般在 *栈* 中
	  下面的两个地址不是一样的,new是新开辟的*/
	short c = 6;
	short* pc = new short;
	*pc = 6;
	cout << "the condition of c : " << &c<<endl;
	cout << "the value of the pc : " << pc << endl;
    //创建数组
    int* arr1 = new int[10];
	delete[] arr1;
	//使用new创建动态结构体
	fruit* apple = new fruit;
	apple->color = "red";
	cout << "apple :" << (*apple).color << endl;
	//使用new创建动态结构体数组
	pizza *p = new pizza[3];
	p[1].r = 1;
	(p+1)->r=1;//这两行都挺好的
	*(p + 1).r =1//结构体数组中这种是错误的

	
	

delete运算符

/*使用原则如下:
(1)delete只能释放new分配的内存
(2)delete不能释放同一内存两次
(3)建数组:  delete[] 数组名*/

指针、数组和指针运算

	//数组名就是首元素地址
	int arr[3]{ 1, 2, 3 };
	int* p = arr;
	//以下为a=arr[2]的几个版本
	a=arr[2];
	a=*(arr+2);
	a=*(p+2);
	//很重要概念:flower表示char的地址,"rose"中的也是传给cout字符串地址//
	char flower[10] = "rose";
	

注意:1.不要直接给未初始化的指针来进行输入操作
如:char* str;
cin>>str;
2.在输出字符串地址的时候要强制类型转换
如:char str="hello:;
cout<<“地址为:”<<(int )str<<endl;
3.数组地址和数组首元素的区别
如:int arr[3]={1,2,3};
&arr表示整个数组地址,假设arr=0(仅假设),那么arr+1=0+3
4
arr表示数组首元素的地址,arr+1=0+1
4

发布了5 篇原创文章 · 获赞 5 · 访问量 153

猜你喜欢

转载自blog.csdn.net/Phil0624/article/details/104280281
今日推荐