指针 一般用法

 (1)pointer_1=&a;指的是pointer_1与a指向的是同一个存储空间,这个空间呢就是存放变量a的空间

(2)定义指针类型是因为指针移动时的需要

(3)pointer_1=&a;pointer_1=&b;这表明指针pointer_1指向的存储空间改变了

(4)变量之间的赋值仅限于当条语句,在后面修改后不会同时改变

eg: a =b;

      b = 5;

    此时a不会等于5

指针用作函数参数(一级指针)

(1)函数中的参数通常有传值与传址一说

(2)交换函数比计较

swap(int *p1,int *p2) 

int *temp; 
temp=(int *)malloc(sizeof(int)); 
*temp=*p1; 
*p1=*p2; 
*p2=*temp; 
free(temp); 

上面这个函数在函数体中仅仅是改变了局部变量p1与p2的值

swap(int *p1,int *p2) 

int *temp; 
temp=p1; 
p1=p2; 
p2=temp; 

上面这个函数在函数体中操作的才是p1p2指向的地址

一维指针域一维数组

(1)数组的指针与指针数组

数组的指针就是数组的起始地址,数组元素的指针是数组元素的地址。指针优点是使得目标程序占内存少、运行速度快,从而使得其质量更高。

 

(2)数组与指针变量用法

int a[8]; 
int *p; 

p = a;

数组下标使用a[k]; 

数组名指针用*(a+k));

指针变量使用*p++;

一维指针二维指针与二维数组

int b[4][4]; 

int *pp=&b[0][0]; //指针
int **ppp=&pp; //指向指针的指针

for(*ppp;*ppp<(&b[0][0]+16);(*ppp)++) 
printf("%d\t",**ppp); 

 

for(pp=&b[0][0];pp<(&b[0][0]+16);pp++) 
printf("%d\t",*pp); 

 

 

字符串

1、用字符数组存放一个字符串 
char str[ ]="this is str!!!"; 
在此 str 是一个数组名,代表字符串数组的首地址。 
2、用字符指针指向一个字符串 
char *str="this is str,too"; 

 

拷贝字符串的函数实现

void copy_string(char from[],char to[]) 

int i=0; 
while(from[i]!='\0'){ 
(to[i]=from[i]); 
i++; 


to[i]='\0'; //注意这条语句

return ; 

void copy_string(char from[],char to[]) 

int i=0; 
while((to[i]=from[i++])!='\0'){ 

 

void copy_string(char *from,char *to) 

int i=0; 
while(*from!='\0') 
*to++=*from++; 
*to='\0'; 

return ; 

 

 指针数组与数组指针

指针数组指的是一个数组,数组中的每个元素都是指针类型,所有的指针都指向不同的
地址,所指的地址的数据也不一定一样,但是所指的数据类型必须一样。 int *ptr[4];  

数组指针指的是定义的是一个指针,而指针指向的是数组,指针指向数组首单元的地
址,对于数组内部元素的属性不了解,仅仅是规定了数组首单元的地址,通过它可以找到整
个数组。 int (*ptr)[10];