C语言第八讲(Pointer指针)

一:

//  main.m

//  LessonPointer9

//

//  Created by lanouhn on 15/4/30.

//  Copyright (c) 2015年 lanouhn. All rights reserved.

//

#import

//void swap(int a,int b);

//void swap(int a,int b){

//    int temp=a;

//    a=b;

//    b=temp;

//}

//如果想要在函数内部修改外部变量时,函数的参数使用指针变量

//void swapPro(int *p1,int *p2);

//void swapPro(int *p1,int *p2){

//    int temp = *p1;

//    *p1 = *p2;

//    *p2 = temp;

//}

//void printArray(int *array,int count);

//void printArray(int *array,int count){

//    for (int i=0; i

//        printf("%d",array[i]);

//    }printf("\n");

//            }

//void bubbleSort(int *array,int count);

int main(int argc, const char * argv[]) {

    //指针:内存的地址编号(类似于房间的门牌号)

  

//    

//    int a=10,b=5;

//    int *p1=&a;

//    int *p2=&b;

//    //当指针变量被重新赋值,意味着指针重指向

//    p1=p2;

//    printf("%d\n",*p1);

//    

//    

    

//    int a =15,b=10;

//    int *x=&a;

//    int *y=&b;

//    *x=11;

//    int *p=&a;

//    p=y;

//    *y = 8;

//    printf("%d,%d\n",a,b);

    

//    int a=6,b=8,c=10;

//    int *x=&a;

//    x=&c;

//    int *y=&b;

//    int *z=&c;

//    *z=5;

//    *x=12;

//    x=y;

//    *y=*x+*   z;

//    printf("%d,%d,%d\n",a,b,c);

//    

    

   //指针常见的问题

    //1.内存地址编号比较低的存储单元,有操作系统控制,不允许访问

//    int *p=NULL;//0x0

//    *p = 100;

    

    //2.野指针,定义指针变量没有赋初值

//    int *p;

//    *p = 100;

    //3.指针变量定义时,*怎么写

//    int *p1 = NULL;//推荐

//    int* p2 = NULL;

//    int * p3 = NULL;

//    int*p4 = NULL;

//    

    //4.指针变量所占的字节数

    //a.与数据类型无关

    //b.与操作系统的位数相关,64位操作系统指针变量占8个字节,32位操作系统占4个字节

    

//    int *p = NULL;

//    printf("%lu\n",sizeof(p));

//    printf("%lu\n",sizeof(int *));

//    printf("%lu\n",sizeof(char *));

//    printf("%lu\n",sizeof(short *));

//    printf("%lu\n",sizeof(long *));

//

    

    //5.定义指针变量的数据类型有什么用途?

    //a.指针变量的数据类型,决定了用*(取值操作)取多少个字节的内容

//    int a=260;

//    short *p=&a;

//    printf("%d\n",*p);

//

    //b.指针变量的数据类型,决定了指针变量做+1操作时,跳转多少个字节

//    int *p=NULL;

//    printf("%p\n",p);//0x0,0x0

//    printf("%p\n",p+1);//0x4,0x4

//    

//    printf("%p\n",++p);//0x4,0x4

//    printf("%p\n",p);//0x4,0x4

//    

//    printf("%p\n",p++);//0x4,0x8

//    printf("%p\n",p);//0x8,0x8

    

    //p+1

    //p++

    //相同:取到的都是下一个字节的地址

    //不同:++p或p++,修改了p的值,会让指针重定向

    

    //指针在数组中的使用

    

   //数组在内存中是连续存储的

    int  array[5] = {1, 2, 3, 4, 5};

    for (int i=0; i<<span se-mark="1">5; i++) {

        printf("%p\n",&array[i]);

    }

    

    //数组的名字,就是数组的首地址

    //array 恒等于  &array[0]

    printf("%p\n",&array[0]);

    printf("%p\n",array);

    int *p=array;

    printf("%d\n",*p);

    printf("%d\n",*array);

    printf("%d\n",*(p+1));

           printf("%d\n",*(array+1));

    

    

    

    

    

    printf("%d\n",array[1]);

   printf("%d\n",p[1]);//xiangdeng

    

//    printf("%d\n",*(p+1));

    printf("%d\n",*(array+1));

//    //array[i] 等于 *(array+i)

//           printf("%d\n",p[4]);

//           printf("%d\n",*(p+4));

//           printf("%d\n",*(4+p));

//           printf("%d\n",4[p]);

//    

//           printf("%d\n",array[4]);

//           printf("%d\n",*(array+4));

//           printf("%d\n",*(4+array));

//           printf("%d\n",4[array]);

    

    

    

//a[i]=*(a+i)

    

    

    

    

    //   有10个元素的数组,随机赋值,取值范围[22,33]

    

//    int array[10]={0};

//    int *p=array;

//    for (int i=0; i<10; i++) {

//        *(p+i) = arc4random()%(32-22+1)+22;

//        printf("%d ",*(p+i));

//    }

//    

//    printf("\n");

    //冒泡排序

//    BOOL flag=YES;

//    for (int i=0; i<10-1&&flag; i++) {

//         flag=NO;

//        for (int j=0; j<10-1-i; j++) {

//            if (*(p+j)>*(p+j+1)) {

//          int  temp=*(p+j);

//                *(p+j)=*(p+j+1);

//                *(p+j+1)=temp;

//                flag =YES;

//                

//        }

//    }

//    

//    }

//    for (int i=0; i<10; i++) {

//        printf("%d ",*(p+i));

//    }

//    

//    int array1[10]={0};

//    int *p1=array1;

    //数组名(数组首地址)与指向数组首地址的指针变量的区别

    //1.数组名(数组首地址)是一个常量地址,不能够修改

    

//    int a=10;

//    aarray=&a;//buyunxu

    //2.sizeof(),如果是数组名(数组首地址),计算的是数组所占的字节数;如果是指针变量,计算的是指针变量所占的字节数

//    printf("%lu\n",sizeof(array1));//40

//    printf("%lu\n",sizeof(p1));//8

    

    //  指针与字符串

//   char string[]="iphone";

    printf("%s\n",string);//iphone

    printf("%s\n",string+3);//one

//    printf("%c\n",string[2]);//h

//    printf("%c\n",*(string+2));//h

//    char string[] = "I Love you";

//    *(string +1)='\0';

//    *(string +7)='\0';

//    printf("%s\n",string);

//    printf("%s\n",string+3);

//    printf("%s\n",string+7);

//    printf("%s\n",string+8);

    

    //通过指针可以计算字符串的长度

    

//    char str[]="Do one thing at a time, and do well!";//一次只做一件事,做到最好

//    int i=0;

//    while (*(str+i)!='\0') {

//        i++;

//    }

//    printf("长度:%d\n",i);

//    int n=10,m=5;

//

//    swap(n,m );

//    printf("%d %d",n,m);

//    printf("\n");

//    

//    

//    swapPro(&n, &m);

//    printf("%d %d\n",n,m);

//    

    

    

    int a=0;;

    a=(int)((double)(3/2)+0.5+(int)1.99*2);

    printf("%d\n",a);

           return 0;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值