Annotation of coherent/a/usr/man/ALL/pointer, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: pointer                     C Language                    pointer
                      4: 
                      5: 
                      6: 
                      7: 
                      8: A pointer is an object whose  value is the address of another ob-
                      9: ject.  The  name ``pointer'' derives from the  fact that its con-
                     10: tents ``point  to'' another object.   A pointer may  point to any
                     11: type, complete or  incomplete, including another pointer.  It may
                     12: also point to a function, or to nowhere.
                     13: 
                     14: The term pointer type refers to the object of a pointer.  The ob-
                     15: ject to  which a  pointer points  is called the  referenced type.
                     16: For example, an int * (``pointer to iinntt'') is a pointer type; the
                     17: referenced  type is  int.   Constructing a  pointer  type from  a
                     18: referenced type is called pointer type derivation.
                     19: 
                     20: ***** The Null Pointer *****
                     21: 
                     22: A pointer  that points to  nowhere is a null  pointer.  The macro
                     23: NULL, which  is defined in  the header stdio.h,  defines the null
                     24: pointer.  The null pointer  is an integer constant with the value
                     25: zero.  It  compares unequal to  a pointer to any  object or func-
                     26: tion.
                     27: 
                     28: ***** Declaring a Pointer *****
                     29: 
                     30: To declare a pointer,  use the indirection operator `*'.  For ex-
                     31: ample, the declaration
                     32: 
                     33: 
                     34:         int *pointer;
                     35: 
                     36: 
                     37: declares that  the variable pointer holds the  address of an iinntt-
                     38: length object.  Likewise, the declaration
                     39: 
                     40: 
                     41:         int **pointer;
                     42: 
                     43: 
                     44: declares that  pointer holds the address of  a pointer whose con-
                     45: tents, in turn, point to an iinntt-length object.
                     46: 
                     47: Failure to declare a  function that returns a pointer will result
                     48: in that function being  implicitly declared as an int.  This will
                     49: not  cause an  error on  microprocessors  in which  an int  and a
                     50: pointer have the same  size; however, transporting this code to a
                     51: microprocessor in which an int  consists of 16 bits and a pointer
                     52: consists of  32 bits will result in  the pointers being truncated
                     53: to 16 bits and the program probably failing.
                     54: 
                     55: C allows  pointers and  integers to  be compared or  converted to
                     56: each other  without restriction.   The COHERENT C  compiler flags
                     57: such conversions with the strict message
                     58: 
                     59: 
                     60: 
                     61: 
                     62: 
                     63: 
                     64: COHERENT Lexicon                                           Page 1
                     65: 
                     66: 
                     67: 
                     68: 
                     69: pointer                     C Language                    pointer
                     70: 
                     71: 
                     72: 
                     73:         integer pointer pun
                     74: 
                     75: 
                     76: and comparisons with the strict message
                     77: 
                     78: 
                     79:         integer pointer comparison
                     80: 
                     81: 
                     82: These problems  should be corrected  if you want your  code to be
                     83: portable to other computing environments.
                     84: 
                     85: See declarations for more information.
                     86: 
                     87: ***** Wild Pointers *****
                     88: 
                     89: Pointers  are omnipresent  in  C.  C  also  allows you  to use  a
                     90: pointer to read or write  the object to which the pointer points;
                     91: this  is called  pointer  dereferencing.  Because  a pointer  can
                     92: point to any place within memory,  it is possible to write C code
                     93: that  generates unpredictable results,  corrupts itself,  or even
                     94: obliterates the operating  system if running in unprotected mode.
                     95: A pointer that aims where it ought not is called a wild pointer.
                     96: 
                     97: When a  program declares a pointer, space is  set aside in memory
                     98: for it.  However, this space has not yet been filled with the ad-
                     99: dress of  an object.  To fill  a pointer with the  address of the
                    100: object  you wish  to access  is called  initializing it.   A wild
                    101: pointer,  as  often as  not,  is  one that  is  not properly  in-
                    102: itialized.
                    103: 
                    104: Normally,  to  initialize  a pointer  means  to  fill  it with  a
                    105: meaningful  address.  For  example, the  following  initializes a
                    106: pointer:
                    107: 
                    108: 
                    109:         int number;
                    110:         int *pointer;
                    111:            . . .
                    112:         pointer = &number;
                    113: 
                    114: 
                    115: The address  operator `&' specifies that you  want the address of
                    116: an object rather than its contents.  Thus, pointer is filled with
                    117: the address of number, and it  can now be used to access the con-
                    118: tents of number.
                    119: 
                    120: The initialization of a string is somewhat different than the in-
                    121: itialization of a pointer to an integer object.  For example,
                    122: 
                    123: 
                    124: 
                    125: 
                    126: 
                    127: 
                    128: 
                    129: 
                    130: COHERENT Lexicon                                           Page 2
                    131: 
                    132: 
                    133: 
                    134: 
                    135: pointer                     C Language                    pointer
                    136: 
                    137: 
                    138: 
                    139:         char *string = "This is a string."
                    140: 
                    141: 
                    142: declares that string is a pointer  to a char.  It then stores the
                    143: string literal  This is a string in memory  and fills string with
                    144: the address of its first character.  string can then be passed to
                    145: functions  to access  the  string, or  you can  step through  the
                    146: string  by incrementing  string until its  contents point  to the
                    147: null character at the end of the string.
                    148: 
                    149: Another way  to initialize a pointer  is to fill it  with a value
                    150: returned by a function  that returns a pointer.  For example, the
                    151: code
                    152: 
                    153: 
                    154:         extern char *malloc(size_t variable);
                    155:         char *example;
                    156:            . . .
                    157:         example = malloc(50);
                    158: 
                    159: 
                    160: uses the  function malloc to allocate 50  bytes of dynamic memory
                    161: and then initializes example to the address that malloc returns.
                    162: 
                    163: ***** Reading What a Pointer Points To *****
                    164: 
                    165: The indirection  operator `*' can  be used to read  the object to
                    166: which a pointer points.  For example,
                    167: 
                    168: 
                    169:         int number;
                    170:         int *pointer;
                    171:            . . .
                    172:         pointer = &number;
                    173:            . . .
                    174:         printf("%d\n", *pointer);
                    175: 
                    176: 
                    177: uses pointer to access the contents of number.
                    178: 
                    179: When a  pointer points  to a  structure, the elements  within the
                    180: structure can  be read by using the  structure offset operator `-
                    181: >'.  See the entry for -> for more information.
                    182: 
                    183: ***** Pointers to Functions *****
                    184: 
                    185: A pointer  can also contain  the address of a  function.  For ex-
                    186: ample,
                    187: 
                    188: 
                    189:         char *(*example)();
                    190: 
                    191: 
                    192: declares example  to be  a pointer to  a function that  returns a
                    193: pointer to a char.
                    194: 
                    195: 
                    196: COHERENT Lexicon                                           Page 3
                    197: 
                    198: 
                    199: 
                    200: 
                    201: pointer                     C Language                    pointer
                    202: 
                    203: 
                    204: 
                    205: 
                    206: This declaration is quite different from:
                    207: 
                    208: 
                    209:         char **different();
                    210: 
                    211: 
                    212: The latter  declares that different is a  function that returns a
                    213: pointer to a pointer to a char.
                    214: 
                    215: The following demonstrates how to call a function via a pointer:
                    216: 
                    217: 
                    218:         (*example)(_a_r_g_1, _a_r_g_2);
                    219: 
                    220: 
                    221: _H_e_r_e, _t_h_e  `*' _t_a_k_e_s _t_h_e  _c_o_n_t_e_n_t_s _o_f _t_h_e _p_o_i_n_t_e_r,  _w_h_i_c_h _i_n _t_h_i_s
                    222: _c_a_s_e _i_s  _t_h_e _a_d_d_r_e_s_s  _o_f _t_h_e _f_u_n_c_t_i_o_n,  _a_n_d _u_s_e_s _t_h_a_t  _a_d_d_r_e_s_s _t_o
                    223: _p_a_s_s _t_o _a _f_u_n_c_t_i_o_n _i_t_s _l_i_s_t _o_f _a_r_g_u_m_e_n_t_s.
                    224: 
                    225: _A _p_o_i_n_t_e_r _t_o  _a _f_u_n_c_t_i_o_n _c_a_n _b_e _p_a_s_s_e_d _a_s  _a_n _a_r_g_u_m_e_n_t _t_o _a_n_o_t_h_e_r
                    226: _f_u_n_c_t_i_o_n.   _T_h_e _f_u_n_c_t_i_o_n_s  _b_s_e_a_r_c_h _a_n_d  _q_s_o_r_t _b_o_t_h  _t_a_k_e _f_u_n_c_t_i_o_n
                    227: _p_o_i_n_t_e_r_s  _a_s _a_r_g_u_m_e_n_t_s.   _A  _p_r_o_g_r_a_m _m_a_y  _a_l_s_o _u_s_e  _o_f _a_r_r_a_y_s  _o_f
                    228: _p_o_i_n_t_e_r_s _t_o _f_u_n_c_t_i_o_n_s.
                    229: 
                    230: ***** _P_o_i_n_t_e_r _C_o_n_v_e_r_s_i_o_n *****
                    231: 
                    232: _O_n_e _t_y_p_e  _o_f _p_o_i_n_t_e_r _m_a_y _b_e _c_o_n_v_e_r_t_e_d, _o_r  _c_a_s_t, _t_o _a_n_o_t_h_e_r.  _F_o_r
                    233: _e_x_a_m_p_l_e, _a _p_o_i_n_t_e_r _t_o _a _c_h_a_r  _m_a_y _b_e _c_a_s_t _t_o _a _p_o_i_n_t_e_r _t_o _a_n _i_n_t,
                    234: _a_n_d _v_i_c_e _v_e_r_s_a.
                    235: 
                    236: _P_o_i_n_t_e_r_s _t_o  _d_i_f_f_e_r_e_n_t _d_a_t_a _t_y_p_e_s _a_r_e  _c_o_m_p_a_t_i_b_l_e _i_n _e_x_p_r_e_s_s_i_o_n_s,
                    237: _b_u_t _o_n_l_y _i_f _t_h_e_y _a_r_e _c_a_s_t _a_p_p_r_o_p_r_i_a_t_e_l_y.  _U_s_i_n_g _t_h_e_m _w_i_t_h_o_u_t _c_a_s-
                    238: _t_i_n_g _p_r_o_d_u_c_e_s _a _p_o_i_n_t_e_r-_t_y_p_e _m_i_s_m_a_t_c_h.
                    239: 
                    240: ***** _P_o_i_n_t_e_r _A_r_i_t_h_m_e_t_i_c *****
                    241: 
                    242: _A_r_i_t_h_m_e_t_i_c  _m_a_y _b_e  _p_e_r_f_o_r_m_e_d _o_n  _a_l_l  _p_o_i_n_t_e_r_s _t_o  _s_c_a_l_a_r _t_y_p_e_s,
                    243: _i._e.,  _p_o_i_n_t_e_r_s _t_o  cchhaarrs or  iinntt.   Pointer arithmetic  is quite
                    244: limited and consists of the following:
                    245: 
                    246: 11. One pointer may be subtracted from another.
                    247: 
                    248: 22. An int or a long, either variable or constant, may be added to
                    249:    a pointer or subtracted from it.
                    250: 
                    251: 33. The operators ++ or -- may be used to increment or decrement a
                    252:    pointer.
                    253: 
                    254: No other  pointer arithmetic is permitted.   No arithmetic can be
                    255: performed on  pointers to  non-scalar objects, e.g.,  pointers to
                    256: functions.
                    257: 
                    258: 
                    259: 
                    260: 
                    261: 
                    262: COHERENT Lexicon                                           Page 4
                    263: 
                    264: 
                    265: 
                    266: 
                    267: pointer                     C Language                    pointer
                    268: 
                    269: 
                    270: 
                    271: ***** i8086 Pointers *****
                    272: 
                    273: Intel designed  the i8086 to use  a segmented architecture.  This
                    274: means that  the i8086  divides memory into  64-kilobyte segments.
                    275: To  program the  i8086 requires  that you  use a  specific memory
                    276: model, which  describes how the segments of memory  are to be or-
                    277: ganized.
                    278: 
                    279: ***** See Also *****
                    280: 
                    281: C language, data formats, operators, portability
                    282: 
                    283: 
                    284: 
                    285: 
                    286: 
                    287: 
                    288: 
                    289: 
                    290: 
                    291: 
                    292: 
                    293: 
                    294: 
                    295: 
                    296: 
                    297: 
                    298: 
                    299: 
                    300: 
                    301: 
                    302: 
                    303: 
                    304: 
                    305: 
                    306: 
                    307: 
                    308: 
                    309: 
                    310: 
                    311: 
                    312: 
                    313: 
                    314: 
                    315: 
                    316: 
                    317: 
                    318: 
                    319: 
                    320: 
                    321: 
                    322: 
                    323: 
                    324: 
                    325: 
                    326: 
                    327: 
                    328: COHERENT Lexicon                                           Page 5
                    329: 
                    330: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.