zoukankan      html  css  js  c++  java
  • c语言学习-指针探究


    1:指针定义格式:
    格式:变量类型 *变量名用途:指针变量用于储存地址(only),也就是根据地址值,访问对应的存储空间。

    注意。int *p 只能指向int类型的数据;

     例: 
    int a = 20;
    int *p;
    p = &a;
    //既p代表地址,*p代表值
    //这时的* 代表指针变量p指向的存储空间,目的:改变p代表的地址指向的空间。

    任何指针类型,都是占用8字节的存储空间。

    指针的长度,是要根据指向的数据的地址,来取多少长度的数据,所以为防止取错数据需要和指向数据的类型一致。

    注意:指针+1:p+1-->调到下一个地址,并非数学意义上的+1 具体取决于定义的类型,如:  int:+4,char:+1,double:+8;

    指针数组:
    int age[5]
    int *p;
    p = age;

    数组赋给指针,可指针也具有数组的特性
    p[i],

    下面的上下情况一样的,
    void change(int *array){ }

    void changge(int array[]){ }

    利用指针接收一个数组,指针变量arry指向数组的首元素。 

    3:指针与字符串

    char name[] = "it";
    
    char *name2 = "it"; //name2指向字符串的首字符,
    由于其是char类型的数据,则只能指向第一个char类型。
    
    printf("%c
    ",*name2);
        -->i
    指针name2就是代表了字符串的首字符
    printf("%s
    ",name2);    
        -->it
    而输出格式%s代表着,他会一致从第一个地址开始输出,知道遇到结束
    知道了指针的基本用法后,定义字符串的就有两种方式:
    char name[] = "it";
    
    char *name2 = "it"; 
    
    name[1]='A';-->OK
    
    *name='A',-->出错。
    
    原因:指针定义的字符串,不可更改,
     
    区别:数组:字符串变量(可更改)
    
         指针:字符串常量(不可更改)
    
    char *n1="it";
    char *n2="it";
    
    printf("%p
    %p
    ",n1,n2);//查看%p查看地址
    二者的结果是一样的。指向同一个地址
    
    **指针数组与指针字符串的区别
    
    char name[]="itcast";
    
      特点:在变量区,内容可以更改
    
     使用场合:字符串的内存需要经常修改
    
    
     指针字符串
    
    char *name="itcast";
    
    特点:这个字符串其实是常量字符串(在内存的常量区),里面的字符是不可更改。
    
    使用场合,字符串的内存需要不需要修改,而且是经常用到。                    

    3:指针数组 
    char *name[5]={"jack","rose","jael"};
    等价与二维字符串数组(字符串数组)
    char name[3][5]={"jack","rose","jael"};

     4:指向函数的指针 

      指针用来指向地址,而函数也有地址,指针也可以用来指

      我们知道数组名,代表数组的地址 ,同样,函数名代表函数地址。 

    //无返回值,无参
    void test(){ }
    //带返回值
    int sum(int a,int b){
    return a+b;
    }
    //带返回值,同事参数也有指针格式
    double min(double a,char *s,int a){}
    
    int main(){
    
    //1,使用void
    //(*p):固定格式
    //左边的void:指针变量p指向的函数没有返回值
    //右边的():代表p指向的函数没有形参
    
    void (*p)();
    
    p = test;//指针变量p指向test
    
    (*p)()://调用test函数,
    或者p();
    
    //2,带返回值int类型
    int (*p)(int a,int b)//int (*p)(int,int)
    p = sum;
    int c = p(4,5);
    
    return 0;
    }
    
    //3,double格式
    double (*p)(double,char *,int);
    p=min;
    //或者
    double (*p)(double,char *,int)=min;

    作者:Darren

    微博:@IT_攻城师

    github:@Darren90

    出处:http://www.cnblogs.com/fengtengfei/

  • 相关阅读:
    福大软工 · BETA 版冲刺前准备(团队)
    福大软工 · 第十一次作业
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    Alpha 冲刺 (5/10)
    Alpha 冲刺 (4/10)
    福大软工1816 · 团队现场编程实战(抽奖系统)
    阿里八八β阶段Scrum(5/5)
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/4164035.html
Copyright © 2011-2022 走看看