指针类型与动态变量

来源:互联网 发布:网络通信工程师培训 编辑:程序博客网 时间:2024/05/17 23:30
    一:概念        指针类型:指示内存地址的数据类型; 指针变量:存放内存地址的变量(简称"指针");二:指针变量的定义    1.格式:     指针的类型 *变量名/*"*"是指针说明符*/;     如:    int *p;int *a[100];char *s;2.结构体指针:    如:    struct node{    int data;    node *next;}*p;三:指针运算符(2个)    1.取地址(&):&后是普通变量(非双指针); 2.取内容(*):*表示指针所指向的变量.如*后是指针;程序中:        指针:p指针所取变量:*p结构指针的成员两种写法:    (1): (*p).m; (2): p->m;四:指针的使用    1.指针赋值:给指针一个地址    如:    p=&a;p=arr;p=p1;p=NULL;2.指针的运算(加或减一个整数)/*是地址内存字节数的+,-*/:如:    p++;p--;p+=i;p-=i;r=p+i;r=p-i;3.两指针相减/*求出距离*/;4.两指针比较;5.*p和普通变量一样用:    如:    *p=10000;*p+=*p1;*p=n/z;    五:动态变量 当指针指向一块无名的内存空间,就形成了一个动态变量;    形如:*p生成一个指定类型的动态变量:    格式:变量名=new 数据类型;功能:生成一个指定类型的动态变量;如:p=new int[10]; p=new node;如给一个动态数组存入n个元素:int n,*p;scanf("%d",&n);p=new int[n];for(int i=0;i<n;i++){    *p=rand()%90+10;    printf("%d ",*p++);}注意区别:    动态数组是一个指针;指针数组是一组指针;六:指针与字符串    一个串的两种访问形式:    1.字符数组,如:char s[]="China";    2.串指针,如:char *s="China";例一:较出串的10个字符后的所有字符    入:this is a book出:book    例二:把串a复制给串b,不用strcpy    char *a,*b;gets(a);b=a;/*b指向a*/puts(b);             注意:                字符数组,指针进行串处理的区别:1.串指针是一个变量,存放的是串的首地址。  字符数组是多个字符变量组成的,存放整个串,数组名是串首地址。    2.对串指针:char*s;    s="china";√  对字符数组:char s[1000];    s="china";×七:指针数组例:输入n个国名,按词典顺序输出。    char *g[100];int n,i;void px(char *g[]){    char *p;    for(int i=0;i<n-1;i++)        for(int j=i+1;j<n=j++)            if(strcmp(g[i],g[j])>0){    p=g[i];    g[i]=g[j];    g[j]=p;}   }    int main(){    scanf("%d\n",&n);for(i=0;i<n;i++){    g[i]=new char;    gets(g[i]);}   px(g);for(i=0;i<n;i++)    printf("%d ",g[i]);return 0;}


1 0
原创粉丝点击