啪啪拉拉噼里啪啦

初学者天堂资料汇集

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  16 随笔 :: 73 文章 :: 16 评论 :: 0 Trackbacks

C语言笔记 指针

1.       程序定义一个变量,分配内存. 内存单元地址内存单元内容的不同

2.       变量的地址就是变量的指针.

3.       一个变量专门存放另外一个变量的地址,称之为指针变量.

4.       如何定义:

int i,  int j ;

int *Pointer_i, *Pointer_j;

定义的指针变量,是专门用来存放地址的.int *Pointer_i;是定义一个指针类型.

赋值语句

Pointer_i=&i;    Pointer_j=&j;

(1)    &:取地址运算符 (2): * 指针运算符 (3): [] 变地址运算符

#include<stdio.h>

Void main()

{  int a,b;

   int *P1,* P2              /* 定义了两个指针变量,P1/P2,专门用来存放地址 */

   P1=&a;P2=&b;           /*P1指向a,P2指向b.*/

printf(“%d,%d”,*P1,*P2);     /*输出P1指向的变量a,输出P2指向的变量b*/

}

5.       P1=&*P2;  P2指向B的地址,P1指向A的地址,经过赋值,P1指向B的地址

6.       *&a  先进行&a运算,a地址,再进行*运算.&a(地址)指向得变量. *&a得作用和*P1作用一样, *&aa等价

7.       交换专题

Swap(int *p1,int*p2)

{ int *p;p=p1; p1=p2; p2=p;

}

Swap(int p1,int p2)

{ int temp; temp=p1;p1=p2;p2=temp;

}

如果直接调用,则主函数得实参没有进行交换.

C/C++ 应该运用

Swap1(int *p1,int*p2)           

{ int temp; temp=p1;p1=p2;p2=temp; }   /* 指针调用

Swap2(int &p1,int&p2){int temp; temp=p1;p1=p2;p2=temp;} /* 引用调用

8.       指向数组元素得指针

int a[10]; int *p; p=&a[0];  // p=&a[0] p=a 等价, int *p=a;

如果P=a; 那么p+1 指向a[1], p+2 指向a[2]; 所代表实际地址p+1*d (d 表示所占字节数,整型2 实型4 字符型 1)

如果p=&a[0], p+i a+i  等价均指向 a[i]的地址; *(p+i)*(a+i) 均是 a[i]的数组元素

8.1     下标法a[i]

8.2     指针法 *(a+i) *(p+i), a是数组名,P是指向数组的指针变量 初值 P=a;

 

用数组名做函数参数

 

 

F(int a[]) F(int *a) 等价

 


形参和实参都用数组名

Main()

{ int a[10];

 ……

 Fa,10

}

 

 


Main()

{ int a[10];

 

 F(a,10)  

 

}

 

 

 F(int *x, int n)

{

………………

}

Main()

{ int a[10]; int *p

  P=a;

 

 F(p,10)  

 

}

 

 

多维数组

a[i][j]

a[0]值是 &a[0][0]  a[1] 的值是&a[1][0]  a[2]的值是&a[2][0]   a[3]&a[3][0]

a&a[0][0]       a[0]+1 &a[0][1]                 a[0]+j  &a[0][j]

a+1 &a[1][0]   a[1]+1 &a[1][1]                a[1]+j  &a[1][j]

a+2 &a[2][0]   a[2]+1 &a[2][1]                 a[2]+j  &a[2][j]

a+i  &a[i][0]    a[i]+j   就是 &a[i][j]  

*(*(a+i)+j) a[i][j]的值

*(a[i]+j) *(*(a+i)+j) 等价

*(*a+1) 就是a[0][1]的值 或者说 *(*a+j)

 

a[1]+2 *(a+1)+2 &a[1][2]   取地址

*(a[1]+2) *(*(a+1)+2) a[1][2] 取值

二维数组

A[i][j] 其中 A[i] 实际上是地址,A是第0行第0列地址,A[i] I行地址第0列地址

 

 

9.       int (*P)[4] 表示P 是一个指针变量,它指向包含4个元素的一维数组

10.   int *p[4]   表示一个指针数组

11.   字符串表现形式

111用字符数组存放字符串,输出该字符串

#include<iostream.h>

main()

{ char string[]=”l over you my beau MEIMEI”

 Cout<<string;

}

   11.2 用字符指针指向一个字符串

   include<iostream.h>

   Void main()

{ char *string=”I love you my MEIMEI”

 Cout<<string;

}

字符串之间的COPY

int  A[]=”I LOVE YOU ”

int  B[50]

int I;

for(i=0;*(A+i)=’\0’ i++)

{*(B+i)=*(A+i)}

*(B+i)=’\0’;

)

Cout<<B; 或者for(i=0;b[i]!=’\0’;i++) {cout<<B[i]}

12.   字符串指针做函数参数

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

{ int I;

 while(from[i]!=’\0’)

  {  to[i]=from[I];i++ }

to[i]=’\0’;

}

12.2       void copy_string(char *from,char *to)

      { for(;from!=’\0’;from++,to++)

        *to=*from;

       *to=’\0’;}

      

while ((*to=*form)!=’\0’)

{ to++; from++} ;

 

While((*to++=*from++)!=’\0’);

 

while(*form !=’\0’)

   { *to++=*from++;}

 *to=’\0’ ;

分析 char *a;

     cin>>a; 危险性

 

 

函数指针 和指向函数的指针变量

用函数指针变量调用函数

13.   main()

{ int  max(int,int)

int (*p)(int, int)

int a,b,c;

c=(*p)(a,b)  //P先与*结合,表示一个指针变量,然后与()结合,表示指针变量指向函数

 // int *p() //P与()结合,声明一个函数,返回值指向整型变量的指针

}

14.   用指向函数的指针做函数参数

 SUB(int, int, int(*p)(int x,int y), int(*q)(int a, int b))

 

{ int max(int x,int y);

int min(int x,int y);

int add(int x,int y);

int Proress(int x,int y ,int(*)P(int x,int y))

}

 

15.       返回指针值的函数

int * sub(int x,int y)

{}

16.       指针数组

类型名 *数组名【数组长度】 // int *p[4] 每个数组元素(相当于一个指针变量)都可以指向一个整型变量

 

17.       指向指针的指针

例题:

#include<string>

#include<iostream.h>

void main()

{ void sort( char *name[],int n);

 void print(char *name[],int n);

 char *a[]={“woaini”,”tushuguanli”,”wosafsat”,”adsao”};

 int n=4;

 sort(name,n);

 print(name,n)

}

void sort(char *name[],int n)

{ char *temp;

 int i,j,k;

for(i=0;i<n;i++)

{ k=i;

 for(j=i;j<n-1;j++)

{ if(strcmp(name[k],name[j])>0) k=j;

if(k!=i)

{

temp=name[i];

name[i]=name[k];

name[k]=temp;

}

}

}

 }

posted on 2005-04-01 08:50 噼里啪啦的世界 阅读(292) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: