首页 > 学院 > 开发设计 > 正文

C语言提高班学习笔记 lesson5 变量、指针

2019-11-08 02:35:05
字体:
来源:转载
供稿:网友

变量

存储空间的别名,访问这块空间  比指针更安全

使用指针也可以访问存储空间 在变量名无法使用的场合 

局部参数传递  动态分配内存

指针也是一个变量 有自己的存储空间

指针也会有指针 -> 指针的本质:保存内存地址的变量   使用指针都是间接访问: 指针访问的内存地址,通过内存地址间接访问空间

使用指针赋值和变量赋值的区别

{	int n = 10;     //直接访问 	int *pn = &n;   //间接访问	n = 100;	*pn = 1000;	return 0;}转到反汇编
012616A5  mov         dWord ptr [ebp-4],eax  	int n = 10;     //直接访问 012616A8  mov         dword ptr [n],0Ah  	int *pn = &n;   //间接访问012616AF  lea         eax,[n]  012616B2  mov         dword ptr [pn],eax  	n = 100;012616B5  mov         dword ptr [n],64h  //一步到位,直接赋值	*pn = 1000;012616BC  mov         eax,dword ptr [pn]  // 先取值到eax,寻址012616BF  mov         dword ptr [eax],3E8h  //再进行赋值	return 0;012616C5  xor         eax,eax  

使用变量的效率比使用指针的效率高

使用指针的场合

在函数中改变变量的值

void foo(int *n){	*n = 100;}

 

指针和const结合

int main(){		 //const 在*左边  指针指向的数据 为常量	 //const 在*右边  指针本身       为常量	const int *p; 	int const *p1;	int *const p2;	const int *const p3;	const int const *const p4;	int n = 10;	int n2 = 100;	p = &n2;  //指针本身能改//	*p = 100; //指向的数据不能改	//	p2 = &n2;  //指针本身不能改	*p2 = 1000; //指向的数据能改	return 0;} 

指针和数组

//数组:相同变量名的一种集合 属于直接访问int main(){	int array[10] = { 1,2,3,4,5 };//编译器分配一段内存空间  	int *parray = array;  //array-> 数组的首地址 array[0](同时也是数组的地址) 		//大部分情况下 数组名=常量指针	//使用指针访问数组	PRintf("%d/r/n", *parray);	printf("%d/r/n", *parray + 1);	printf("%d/r/n", *parray + 2);	printf("%d/r/n", *parray + 3);	// 以下两种场合  	//      sizeof 运算 指针得到的是指针的大小 数组得到的是数组的大小	//      做&运算		int *paddrarray = &array; //加&代表取当前数组地址	printf("%d/r/n", parray+1,paddrarray+1); 	printf("%d/r/n", array + 1, &array + 1);//运算的规则不同	// array+sizeof(*array)	// *array+sizeof(*&array)	return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表