C 의 지침

          ,                     。                     :     ,         ,                ,             。       。 
            : 
  : 

(1)int*ptr; 

(2)char*ptr; 

(3)int**ptr; 

(4)int(*ptr)[3]; 

(5)int*(*ptr)[4]; 

            ,             <<    c c ++       >>。 

      
       ,                  ,              。            。               : 

(1)int*ptr;//      int* 

(2)char*ptr;//      char* 

(3)int**ptr;//      int** 

(4)int(*ptr)[3];//      int(*)[3] 

(5)int*(*ptr)[4];//      int*(*)[4] 

   ?                ? 

         

                   ,                                。 

     ,                           *  ,             。  : 

(1)int*ptr;//         int 

(2)char*ptr;//          char 

(3)int**ptr;//          int* 

(4)int(*ptr)[3];//          int()[3] 

(5)int*(*ptr)[4];//          int*()[4] 

         ,              。 

     (        )              。   C      ,    ,          "  "      "     " "        "    ,           。      ,          ,               ,          ,     。 

    ,                

              ,              ,          。 32    ,             32   ,  32           32  。                             ,   si zeof(        )      。  ,          XX,            XX           ;                ,                     。 

                            。    ,            ,          ,               ,        。 

  ,       ,     :          ?         ?        ? 

            

           ?      sizeof(     )       。 32    ,       4      。 

                                。 

        

             。                             。  : 

  : 

1、chara[20]; 

2、int*ptr=a; 

... 

... 

3、ptr++; 

    ,  ptr    int*,       int,            a。     3  ,  ptr   1,         :    ptr     sizeof(int), 32    ,     4。            , ptr            a            4   。 

  char          ,  ,  ptr     a  0          ,       a   4          。 

                     ,   : 

  : 

intarray[20]; 
int*ptr=array; 
... 
//              。 
... 
for(i=0;i<20;i++) 
{ 
 (*ptr)++; 
 ptr++; 
} 

                 1。          ptr 1,                  。 

    : 

  : 

1、chara[20]; 

2、int*ptr=a; 

... 

... 

3、ptr+=5; 

      ,ptr    5,         :   ptr    5 sizeof(int), 32         5 4=20。          ,    ptr         5  ptr        ,         20   。      ,  5  ptr    a  0          , 5 ,ptr       a        。              ,          。            。 

     ,ptr    5,          ,   ptr      5 sizeof(int),  ptr          ptr               20   。 

    ,    ptrold      n ,         ptrnew,ptrnew    ptrold     ,ptrnew       ptrold         。ptrnew    ptrold     n sizeof(ptrold      )   。   ,ptrnew         ptrold                n sizeof(ptrold      )   。 

    ptrold      n ,         ptrnew,ptrnew    ptrold     ,ptrnew       ptrold         。ptrnew    ptrold     n sizeof(ptrold      )   ,   ,ptrnew         ptrold                n sizeof(ptrold      )   。 

   & * 

  &       ,* ...    "     "。 

&a          ,      a     *,         a   ,         ,   a   。 

*p           。  *p    p      ,         :     p     ,        p      。 

  : 

inta=12; 
intb; 
int*p; 
int**ptr; 
p=&a; 
//&a        ,   int*,      int,      a   。 
*p=24; 
//*p   ,        int,        p      ,  ,*p    a。 
ptr=&p; 
//&p       ,       p     *,    int **。          p   ,   int*。             p     。 
*ptr=&b; 
//*ptr    ,&b        ,                    ,   &b  *ptr          。 
**ptr=34; 
//*ptr    ptr      ,        ,         *  ,      int     。 

      

                 ,             。 

             : 

  : 

inta,b; 
intarray[10]; 
int*pa; 
pa=&a;//&a        。 
int**ptr=&pa;//&pa         。 
*ptr=&b;//*ptr &b       。 
pa=array; 
pa++;//        。 

  : 

char*arr[20]; 
char**parr=arr;//   arr      ,arr        
char*str; 
str=*parr;//*parr       
str=*(parr+1);//*(parr+1)       
str=*(parr+2);//*(parr+2)       

               ,                    :     ,        ,        ,         。 

  ,                                ,             ,         。 

    ,&a      ,             。*ptr     ,  *ptr           ,  *ptr    pa,  pa             ,  *ptr          。 

         

                ,             <<    c c++       >>。 

                。   : 

  : 

intarray[10]=,value; 
... 
... 
value=array[0];//    :value=*array; 
value=array[3];//    :value=*(array+3); 
value=array[4];//    :value=*(array+4); 

   ,       array      ,   int[10],    array      ,       0   ,   int*,               int。  *array  0        。  ,array+3        3      ,  *(array+3)  3。      。 

  : 

char*str[3]={ 
 "Hello,thisisasample!", 
 "Hi,goodmorning.", 
 "Helloworld" 
}; 
chars[80]; 
strcpy(s,str[0]);//    strcpy(s,*str); 
strcpy(s,str[1]);//    strcpy(s,*(str+1)); 
strcpy(s,str[2]);//    strcpy(s,*(str+2)); 

   ,str         ,              ,            。      str        ,       0   ,     char**,       char*。 

*str      ,     char*,        char,          "Hello,thisisasample!"         , 'H'   。 str+1      ,       1   ,     char**,       char*。 

*(str+1)      ,     char*,        char,    "Hi,goodmorning."      'H',  。 

               。       TYPEarray[n],     array       :  ,       ,     TYPE[n];   ,      ,       TYPE*,         TYPE,          ,              0   ,             ,       0             。           ,   array++        。 

           array         。 

    sizeof(array) ,   array      ,   sizeof             。 

    *array ,array      ,               0     。sizeof(*array)           。 

   array+n(  n=0,1,2,....。) ,array      , array+n        ,     TYPE*,       TYPE,      n   。 sizeof(array+n)           。 

  : 

intarray[10]; 
int(*ptr)[10]; 
ptr=&array; 

   ptr     ,     int(*)[10],       int[10] ,                。   ptr=&array ,array      。 

        sizeof(),       ,sizeof(    )                             ?     。  : 

int(*ptr)[10]; 

  32    , : 

sizeof(int(*)[10])==4 
sizeof(int[10])==40 
sizeof(ptr)==4 

   ,sizeof(  )               ,            。 

           

                 。 

   : 

structMyStruct 
{ 
 inta; 
 intb; 
 intc; 
} 
MyStructss=; 
//       ss,  ss         20,30 40。 
MyStruct*ptr=&ss; 
//           ss   。     MyStruct*,       MyStruct。 
int*pstr=(int*)&ss; 
//           ss   。              ptr    。 

        ptr   ss       ? 

  : 

ptr->a; 

ptr->b; 

ptr->c; 

         pstr   ss       ? 

  : 

*pstr;//   ss   a。 

*(pstr+1);//   ss   b。 

*(pstr+2)//   ss   c。 

      MSVC++6.0        ,     ,    pstr            ,          ,                     : 

   : 

intarray[3]=; 

int*pa=array; 

    pa    array         : 

*pa;//    0    

*(pa+1);//    1    

*(pa+2);//    2    

                             。 

   C/C++            ,                   ,           。              ,        ,                      ,               "    ",                      。 

  ,     ,  *pstr        ss        a,     *(pstr+1)           b。    a   b            ,   *(pstr+1)              。           。                            , ,         。 

                           ptr   。 

         

                    。 

intfun1(char*,int); 
int(*pfun1)(char*,int); 
pfun1=fun1; 
.... 
.... 
inta=(*pfun1)("abcdefg",7);//          。 

            。        ,             。 

   : 

intfun(char*); 
inta; 
charstr[]="abcdefghijklmn"; 
a=fun(str); 
... 
... 
intfun(char*s) 
{ 
intnum=0; 
for(inti=0;i{ 
num+=*s;s++; 
} 
returnnum; 
} 

        fun             ASCII    。    ,           。      ,  str         s ,    str      s,s        str        ,  str s           。      s    1  ,        str     1  。 

       

                   ,           ,              。           ,       ,                  ,                        。 

   : 

1、floatf=12.3; 

2、float*fptr=&f; 

3、int*p; 

       ,        p    f,     ?        ? 

p=&f; 

  。    p    int*,       int。   &f        ,      float*,       float。     ,           。     MSVC++6.0 ,                    ,         ,           ,      。         ,    "      ": 

p=(int*)&f; 

       p,                  TYEP*TYPE,        : 

(TYPE*)p; 

                 ,        TYPE*,       TYPE,                。      p           。 

               ,                     ,           。 

   : 

voidfun(char*); 
inta=125,b; 
fun((char*)&a); 
... 
... 
voidfun(char*s) 
{ 
charc; 
c=*(s+3);*(s+3)=*(s+0);*(s+0)=c; 
c=*(s+2);*(s+2)=*(s+1);*(s+1)=c; 
} 
} 

      32   , int        ,char       。  fun                     。     ?        ,  &a        ,     int*,       int。          char*,       char。  ,            ,         int*   char*     。      ,                   :            char*temp,     temp=(char*)&a,    temp     s。        :s    char*,       char,        a    。 

      ,             , 32    ,         32   。                       ?       : 

unsignedinta; 
TYPE*ptr;//TYPE int,char         。 
... 
... 
a=20345686; 
ptr=20345686;//          ptr    20345686(    
) 
ptr=a;//          ptr    20345686(   ) 

     。              。              ? ,    : 

unsignedinta; 
TYPE*ptr;//TYPE int,char         。 
... 
... 
a=   ,              ; 
ptr=(TYPE*)a;//  ,     。 

       (TYPE*)         (TYPE*)    。   (TYPE*)          a           。     a             ,    ,    ptr   ,          。 

        ,                      。     。                        ,                    : 

   : 

inta=123,b; 
int*ptr=&a; 
char*str; 
b=(int)ptr;//   ptr           。 
str=(char*)b;//                 str。 

         ,                ,                   。 

        

      : 

   : 

chars='a'; 
int*ptr; 
ptr=(int*)&s; 
*ptr=1298; 

  ptr   int*     ,       int。        s    。 32    ,s     ,int       。           s       ,   s                 。          ?        ,              。                  ,                  ,            ,           !          。 

        : 

   : 

1、chara; 

2、int*ptr=&a; 

... 

... 

3、ptr++; 

4、*ptr=115; 

           ,    。      ? 3    ptr    1   ,ptr        a              。         ?     。              ,         。  4                !       。        ,           :           。           ,                  ,           。 

          :ptr1=(TYPE*)ptr2 ,  sizeof(ptr2   )  sizeof(ptr1   ),       ptr1   ptr2            。  sizeof(ptr2   )  sizeof(ptr1   ),       ptr1   ptr2             。 

좋은 웹페이지 즐겨찾기