zoukankan      html  css  js  c++  java
  • C 语言指针

    //  main.m
    
    #import <Foundation/Foundation.h>
    #import "abc.h"
    
    
    
    
    int main(int argc, const char * argv[]) {
        
        //指针:
        /*
         指针说白了就是地址.
         
        
        
        
        */
    //    int a=20;//首先定义了一个 int 类型的变量a;
    //    int *p=&a;//定义了一个int *类型的指针p,我们定义的指针p指向我们int 类型变量a的地址,(也就是把变量a的地址存储到指针p中);    *:取值运算符    &:取地址运算符
    //    
    //    printf("%d
    ",*p);//这里是我们取出指针 p指向变量a地址里面的值(*-->  是取值运算符)
    //     printf("%p
    ",p);//这里是 我们取出指针p中存储的变量a的地址
    //    
    //    printf("%p
    ",&a);//这里是打印出变量a所在的地址
    //
        
        
        
        //注意:   *:取值运算符    &:取地址运算符
        //指针所在字节大小和类型无关之和操作系统有关系  (   操作系统分为32位操作系统和64位操作系统).
        
        //定义一个变量a  并给其赋值
    //    int a =20;
    //    printf("%p
    ",&a);//打印出变量所在的地址
    //    int b=10;//定义一个变量 b 并给其赋值
    //    printf("%p
    ",&b);//打印出变量b所在地址
    //    
    //    int *p=&a;//定义一个 int *类型的指针 p 指向我们变量a所在的地址
    //    printf("%d
    ",*p);//取出变量a所在地址中的值
    //    
    //    p = &b;//这句话的意思是我们的指针 p 又重新指向了 b的地址,里边存储的是变量b的地址
    //    *p = 100;//通过地址就可以修改对应的值(间接修改)
    //    printf("%d
    ",*p);
    //    printf("%d
    ",b);
    //    
    //    
    //    printf("指针*p所占字节的大小%lu
    ",sizeof(p));
        
        
        
        
    //    //定义一个char类型的变量
    //    char c='a';
    //    //定义一个char类此你给的指针
    //    char *q=&c;
    //    //打印c的地址
    //    printf("&c=%p
    ",&c);
    //    printf("&c=%p
    ",q);
    //    
    //    //打印变量c的值
    //    printf("c=%c
    ",c);
    //    
    //    //打印指针q指向的地址中对应的值
    //    printf("c=%c
    ",*q);
    //    
    //    
    //    //使用指针q修改我们变量c的值
    //    *q='a';
    //    printf("c=%d
    ",*q);
    //    printf("指针*q所占字节大小:%lu
     ",sizeof(q));
        
    //    //定义一个int 类型的变量 a;
    //    int a=20;
    //    //定义一个 int *类型的指针指向我们变量a的存储地址
    //    int *p=&a;
    //    
    //    
    //    
    //    
    //    int *q;//野指针,如果定义一个 指针没有给其赋初值或者是指向,这时候的指针就叫做 野指针(孤魂野鬼的意思),一定要避免野指针,因为其很容易使程序出现崩溃
    //    printf("%d
    ",*q);
    //    
    //    
    //    int *w=NULL;//当定义指针的时候 我们不想让这个指针指向任何地址,我们可以给这个指针赋值NULL,    NULL的意思是代表空.....
    //    
        
        /*
        //指针运算
        //指针只有加减 两种运算
        //首先我们定义一个int 类型的变量a
        int a=8;
        //定义一个指针p指向了变量a的地址
        int *p=&a;
        //打印变量a的地址
        printf("&a=%p
    ",p);
        //打印变量a的值
        printf("a=%d
    ",*p);
        
        //加法
        printf("a=%d
    ",*p+1);//取出变量a的地址,并对其进行+1
        
        printf("p=%p
    ",p);//打印出p的地址和我们变量a 的地址相同,并没有改变地址,改变的只是值(内部的值);
        
        printf("p=%p
    ",p+1);//向高位移动四个字节
        
        
        printf("---------------
    ");
        
        
        char b='c';
        char *q=&b;
        printf("&b=%p
    ",q);
        printf("b=%c
    ",*q);
        printf("q+1=%p
    ",q+1);//想高位移动一个字节
        
        printf("---------------
    ");
    
        
        int *r=NULL;
        printf("r=%p
    ",r);
        printf("r+1=%p
    ",r+1);
        //由此我们可以看出指针移动的字节大小和我们类型有关系
        */
        
        
        
        //减法
        //首先定义一个int类型的变量
    //    int a=6;
    //    //定义一个指针p;
    //    int *p=&a;
    //    
    ////   // p=1;      //这里的p代表的是地址,而1 代表的是我们的整形变量,爆黄是因为类型不匹配
    ////    p=p+1;//代表的是:这里的p指的是地址,代表的在是我们p地址的基础上向高位移动4个字节
    ////    printf("%d
    ",*p);
    ////    
    ////    
    //    printf("&a=%p
    ",p);//打印变量a的地址
    //    //打印变量a的值
    //    printf("a=%d
    ",*p);
    //    printf("%d
    ",*p-1);
    //    printf("p-1=%p
    ",p-1);//代表的是向低位移动四个字节
    //    
        
        
    //    //指针与数组的关系:
    //    int arr[]={2,4,6,8,9};
    ////    printf("arr=%p
    ",arr);
    ////    
    //    int *p=arr;
    //    printf("p=%p
    ",p);
    //    //由此可以得知我们的数组名就是我们首地址
    //    printf("%d
    ",*p);//这里取出的是我们数组首地址中下标为0的元素也就是2;
    //    printf("%d
    ",*p+1);//取出2之后对其进行+1操作
    //    printf("%d
    ",*(p+1));//取出下标为1的元素
    //    
    //    
    //    arr[0]=10;
    //    printf("%d
    ",arr[0]);
    //    for (int i=0; i<5; i++) {
    //        printf("%d ",arr[i]);
    //    }
    //    
    //    printf("
    ");
    //    //通过指针找出对应下标代表的元素并进行修改
    //    *(p+3)=20;
    //    
    //    printf("%d
    ",arr[0]);
    //    for (int i=0; i<5; i++) {
    //        printf("%d ",arr[i]);
    //    }
    //    
    //    printf("
    ");
    //    
    //    //打印数组所占字节大小
    //    
    //    printf("arr =%lu
    ",sizeof(arr));//数组所占自己多少和我们操作系统无关,和我们元素个数以及其对应的类型有关,数组名是常量地址,不能重指向(也不能赋值);
    //    
        
        
      
    //    int arr[2][3]={1,2,3,4,5,6};
    //   
    //    int *p=&arr[0][2];
    //    printf("%d
    ",*p);
    //    
    //    
    //    //指针与字符串
    //    char string[]="iphone";
    //    printf("string=%lu
    ",sizeof(string));
    //    printf("string=%p
    ",string);
    //    char *p=string;
    //    printf("p=%p
    ",p);
    //    printf("string=%c
    ",*p);
    //    printf("string=%c
    ",*(p+1));//取出我们字符串中的元素
    //    
    //    
    //    *(p+1)='v';//修改字符串中的元素
    //    printf("string=%s
    ",string);
    //    
        
        //编程实现,通过指针计算字符串的长度;
    //    char str1[]="iphone";
    //    int count=0;//用来计数
    //    char *p=str1;
    //    while (*(p+count)!='') {
    //        count++;
    //    }printf("%d
    ",count);
    //    
        
       // 指针与数组
    //    char *str[3]={"ios","iphone","imac"};//字符串指针数组
    //    
    //    printf("str=%s
    ",*str);
    ////
    ////    printf("str=%c
    ",*(str+2)[0]);//iphone//为什么取"iphone的p会崩溃
    ////    
    ////    
    ////    
    //    printf("str=%s
    ",str[0]);
    //    
    //    printf("ios=%c
    ",*str[0]);
    //    
    //    //取ios的o
    //    printf("ios=%c
    ",*(*str+2));//????
    //printf("str=%c
    ",*(*(str+1)+1));//"iphone"中的p
    //    
    //   printf("str=%c
    ",*(*(str+2)+1));//"imac"中的m
        
        
        
    //    char *str[3]={"ipad","iphone6s","INM"};
    //    //取出ipad
    //    printf("str=%s
    ",*str);
    //    printf("str=%s
    ",*(str+1));
    //    printf("str=%s
    ",*(str+2));
    ////取出ipad的p
    //    printf("str=%c
    ",*(*str+1));
    //    
    //    printf("str=%c
    ",*(*(str+1)+6));
    //    
    //    *str="fgf";
    //    printf("str=%s
    ",*str);
    //    //常量区的东西是不可以被修改,只能看不能碰
    //    *(*str+1)='t';
    //    printf("str=%c
    ",*(*str+1));
    //    
    //
        
        //首先定义两个变量a b实现的是两个值得交换(使用函数);
        
        
        int a=10;int b=20;
        cd(&a,&b);
        printf("a=%d
    ,b=%d
    ",a,b);
      
        
        return 0;
    }
  • 相关阅读:
    卡特兰数,高精度卡特兰数
    SqlServer表中两条全然同样的记录,怎样删除当中1条
    微信.NET 微信开发 自己主动内容回复 ASP.NET C#代码
    RadHat搭建内网YUM源server
    2014上海全国邀请赛题解 HDOJ 5090-5099
    Enum枚举类|注解Annotation
    Galera 10.0.20 on CentOS 6.6
    CSS布局那点事儿
    利用CSS制作脸书
    《民国枭雄杜月笙》—— 听后总结
  • 原文地址:https://www.cnblogs.com/huyibo/p/5475228.html
Copyright © 2011-2022 走看看