zoukankan      html  css  js  c++  java
  • [c/c++] programming之路(19)、数组指针

    一、指针运算

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main0(){
     5     int a=10;
     6     int *p=&a;
     7     printf("%d
    ",*(p+1));//变量没有初始化 
     8     printf("%x,%x
    ",p,p+1);//相隔一个元素大小
     9     system("pause");
    10 }
    11 
    12 //指针的乘除法没有意义
    13 //加减法就是确定数组的元素之间相隔几个元素
    14 void main(){
    15     int a[10];
    16     /*for(int *p=a,i=0;p<a+10;p++,i++){
    17         *p=i;
    18     }*/
    19     for (int *p = a + 9,i=9; p >= a; p--,i--)
    20     {
    21         *p = i;
    22     }
    23     system("pause");
    24 }

    二、指针赋值

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main3(){
     5     //指针与整数不能直接赋值,如果需要赋值,强制类型转换
     6     int *p=(int *)1234;
     7     int m=(int)&p;
     8 }
     9 
    10 void main4(){
    11     double a[10] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,0.0};
    12     printf("%d
    ",&a[9]-&a[3]);
    13     //指针减法
    14     //(0x300500+9*8-0x300500+3*8)/sizeof(double)
    15     printf("%f
    ",*(&a[3]+2));
    16     //指针的加法
    17     //0x300500+2*sizeof(double)
    18     getchar();
    19 }
    20 
    21 void main(){
    22     int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    23     int *p = a;
    24     //printf("%d
    ", *++p);//++优先于*
    25     while(p++<a+5){
    26         printf("%d,%x
    ",*p,p);
    27     }
    28 
    29     getchar();
    30 }

    三、指针高级运算

     1 #include<stdio.h>
     2 
     3 void main(){
     4     double a[10] = { 11, 2, 13, 4, 15, 6, 17, 8, 19, 0 };
     5     double *p = a;
     6     //printf("%d
    ", sizeof(*p));    8
     7     //printf("%d
    ", sizeof(*p++));  8
     8     //printf("%d
    ", sizeof(p++));   4
     9     //printf("%f
    ", *p++);          11
    10     //printf("%f
    ", *++p);          2
    11     /*printf("%f
    ", ++*p);          12
    12     printf("%f
    ", a[0]);            12    */
    13 
    14     /*printf("%f
    ", (*p)++);        11
    15     printf("%f
    ", a[0]);            12    */
    16 
    17     /*printf("%f
    ", ++(*p));        12
    18     printf("%f
    ", a[0]);            12    */
    19 
    20     getchar();
    21 }

    四、指针与二维数组

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main(){
     5     int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
     6     printf("a=%d
    ", sizeof(a));//数组大小
     7     int (*p)[4]=a;//用一个指向有四个元素的一维数组的指针指向a
     8     printf("p=%d,*p=%d,*p+0=%d
    ", sizeof(p), sizeof(*p), sizeof(*p + 0));
     9     //p行指针
    10     //*p取出行指针内容,可以得到一行多大
    11     //*p+0,列指针:在某一行,取出第0个元素的地址
    12 
    13     for (int i = 0; i < 3; i++)
    14     {
    15         for (int j = 0; j < 4; j++)
    16         {
    17             //下面三行等价
    18             printf("%d,%x	", p[i][j],&p[i][j]);
    19             printf("%d,%x	",*(p[i]+j) , p[i]+j);
    20             printf("%d,%x	", *(*(p+i) + j), *(p+i) + j);
    21             printf("
    ");
    22         }
    23     }
    24     system("pause");
    25 }

  • 相关阅读:
    jvm类加载机制
    线程误区-join,wait(里边还是调用的wait)
    线程间通信wait和notify【All】简介
    指令重排序
    window.opener
    scrollIntoView()
    保持饥饿,保持愚蠢
    执行sql语句,不依靠实体 获取string值
    join函数详解
    html常用代码大全
  • 原文地址:https://www.cnblogs.com/little-monkey/p/7436399.html
Copyright © 2011-2022 走看看