c语言指针2


指针的重要性数组

#include <stdio.h>

/*
	指针的重要性:

		1,表示一些复杂的数据结构

		2,快速的传输数据

		3,使函数返回一个以上的值

		4,能直接访问硬件

		5,可以方便的处理字符串

		6,是理解面向对象语言中引用的基础

		总结:指针是c语言的灵魂

	
	 指针的定义:
			地址:
				
				内存单元的编号
				从零开始的非负数整数

				范围:若是是32位的机器就是从【0--4G-1】


			指针:
				
				指针就是地址,地址就是指针
				指针变量就是存放内存单元编号的变量,或者说指针变量就是存放地址的变量
				指针(0019FF38)和指针变量(p)是两个不一样的概念
				可是要注意:一般咱们叙述时会把指针变量简述为指针,实际含义并不同
				指针的本质就是一个操做受限的非负整数(不能加乘除,能够减)


		
	 指针的分类:
			

		1,基本类型指针
		
			
					
						int * p;      // p是变量的名字,int *表示p变量存放的int类型变量的地址
									  // int *p 不表示定义了一个名字叫作*p的变量
									  // int *p 应该这样理解:p是变量名,p变量的数据类型是int *类型
									  //  所谓int *类型实际就是存放int变量地址的类型
 
						int i = 3;
						int j;
						p = &i;  
						
 
								1,p保存了i的地址,所以p指向i
 
								2,p不是i,i也不是p,更准确的说,修改p的值不会影响i的值,修改i的值也不会影响p的值
 
								3,若是一个指针变量指向了某个普通变量,则
             
										*指针变量   就彻底等同于  普通变量
                     
										例子:
											若是p是个指针变量,而且p存放了普通变量i的地址
											则p指向了普通变量i
                         
											*p 就彻底等同于i
											或者说:在全部出现*p的地方均可以替换成i
													在全部出现i的地方均可以替换成*p
													printf("%d\n",i); //输出3
													printf("%d\n",*p); //输出3
											*p 就是以p的内容为地址的变量
         
					
						j = *p;
 
						printf("i = %d ,j = %d ,*p = %d \n",i,j,*p);  //结果i = 3 ,j = 3 ,*p = 3
					
 
				

		

		2,指针和数组

		3,指针和函数

		4,指针和结构体

		5,多级指针



*/


int main(void)
{
		
	return 0 ;		
}

常见错误1
数据结构

#include <stdio.h>


int main(void)
{

	int i = 5 ;
	int * p ;
	int * q;

	p = &i;

	//q = &i;
	
	//*q  = p; //error语法编译会出错  在这里*q是一个值,是一个int类型 而p是int * 是个地址,类型不一致,因此报错

	//*q = *p;  //由于q没有赋值,至关于没有地址,因此会分配垃圾地址,形成非受权访问,为了不非受权访问,因此程序报错

	// p = q;  q是垃圾值,q赋给p p也变成垃圾值

	printf("%d\n",*q); //q的空间是属于本程序的,因此本程序能够读写q的内容,可是q的内部是垃圾值,则本程序不能读写*p的内容


	return 0;



}


常见错误2ide

#include <stdio.h>

//把5赋值给了一个不知道的单元,因此程序报错


int main(void)
{
	int * p;
	
	int i = 5;

	*p = i;
		
	
	printf("p的地址是%p\n",&p);
	printf("i的地址是%p\n",&i);
	printf("*p的值是%d\n",*p);
	//printf("%d\n",*p);
	
	return 0;


}


经典程序互换两个数字
函数

#include <stdio.h>
/*
	*号的含义:
		1,乘法
		2,定义指针变量
		3,指针运算符
			该运算符放在已经定义好的指针变量的前面
			若是p是一个定义好的指针变量
			则*p表示以p的内容为地址的变量
				


 */



void huhuan_1(int ,int );
void huhuan_2(int * , int *);
void huhuan_3(int * , int *);

int main()
{
	int a = 3 ;
	int b = 5;

	huhuan_1( a, b);  	
	printf("a=%d,b=%d\n",a,b);  //a=3,b=5

	huhuan_2( &a, &b);  	    //huhuan_2( a, b);错误;	huhuan_2( *p, *q);也是错误的
	printf("a=%d,b=%d\n",a,b); //a=3,b=5
	
	huhuan_3( &a, &b);  	  
	printf("a=%d,b=%d\n",a,b); //a=5,b=3


	return 0;
}


//不能完成互换
void huhuan_1(int a,int b)
{
	 int t;

	 t = a;
	 a = b;
	 b = t;

	 return;

}



//不能完成互换
void huhuan_2(int * p, int *q) //由于p和q才是变量,存储的是地址,因此在主函数里传过来的也是地址,因此是	huhuan_2( &a, &b);  
{

	int * t;
	
	 t =  p;
	 p =  q;
	 q =  t;
	

}

//能够完成互换
void huhuan_3(int * p, int *q) 
{

	int t;  //若是要互换*p和*q的值,则t必须定义成int,不能定义成int* 不然语法报错
	
	 t =  *p; //p是int * ,*p的int
	 *p =  *q;
	 *q =  t;
	

}
相关文章
相关标签/搜索