附件囊肿吃什么药可以消除
? ??? ??? ??? ???? ????. (2010? 11?) |
???(pointer)? ????? ???? ?? ??, ?? ? ??? ??? ????? ???? ??? ???. ???? ???? ?? ???? ?? ????? ??.
???? ?????, C, C++, ??? ? ?? ???? ??? ? ?? ???? ?? ?? ???, ???-2, ???? ?? ????? ?? ????? ????, ??, ?? ???? ??? ??? ??? ? ??.
? ?? ??? ????? ???? ???? ??? ??? ????? ? ? ??? ???? ??? ????.
????? ???? ??? ??? ?? ? ??. ???? ?? ??? ??? ????? ????.
C ??? ???
[??]?? ??? ???? ?? ????. const? ?? ??? ?? ?? ?? ??? ??? ?? RAM? ????. ??? ???? ??? ???? ?? ??? ?????. ??? ??? ??? ????. ??? ?? ??? ???? ??? ???? ?? ???. ???? ???? ???? ???? ?????. ?, ?? ??? ???? ?? ??? ?? ?? ?? ????. ???? ?? ???? ???? ??? ???? ?? ???. ??? ???? ??? ??? ???? ???? ?????. ??? ??? ??? ???? ??? ????? ??? ??? ??? ?? ?? ?? ??. ????? ????? ??? ??? ???? ???? ??? ?????. ????? ?? ?? CPU? ????? ?? ???? ????. ??? ??? ???? ???? ???? ???? ??? ? ???? ?? ?? ???? ?????. ??? ??? ?? ?? ???????? ???? ?????.
???? ??? CPU? ??? ?? ??? ?? ???? ??? ??? ????. ???? ??? ???? CPU? ???? ???? ??(???)? ????. RAM?? ROM/FLASH ?? ?? ??? ??. MCU(8051,...)? ??? ?? ?? ??? ??? ??? ?? ????? ????. 8051? ??? 256??? ?? ??? ????. 256???? ?? ??? ?? ???? ???? ?? ??? ?? ? ??. ?? ?? ???? ???? ?? 16??? ?? ??? ?? ????? ?? ????. ??? ??? ???? ??? ??? ?? ?? ?????. ?? ??? ???? 8?? ?? 16??? ????. C?? ?????? ?? ??? ? ?? ??? ????.
??? ??? ???? ???? ??? ???? ????. C??? UNIX ??? OS? ??? ? ??????? ??? ???? ??? ?? ??? ?? ?? ??? ??? ? ? ??. ???? ??? ??? ????? ??? ? ??. ??? ?? ?? ???? ?? ??? ??? ???? ? ?? ????. ?? ?? ??? ???? ?? ?? ?? ?? ???? ? ???, ???? ???? ??? ? ? ?????.
????? ????? ?? ??? ???? ??? ??? ??? ??? ?? ? ??? *(??)? ???(char* a; == int * pa; == double *exm;) ??? ??? ??.
??? ??? ??? ??? ??????, ?? ??? ??? ????? int a;?? ???? ?? a? ?????? ????, ?????? int? ? ?? ??? a??? ?????, *? ?? ???? ???? ?? ??? ????? *? ?? ??? ? ??? ?????? ?????? ??? ???? ??.
??? ??? ???? ????? ???? ??. ???? ????? ?? ??? ? ????? ???? ?? ? ????? ???? ? ??? ?(???)? ????(???)?? ???? ??? 4 ??? ??? ????? ?? ?????? ????? ??? ??? ???? ?????? ?? ???? ????(memory)? ??? ???? ???? 1 ??? ??? 3 ???? ? ???, ??? 8 ??? ?? 4 ????? ????? ??(??? ?)? ?? ?? ??? ???? ?? ??(?)? ???? ???? ????? ??? ??? ??? ??? ??.
?? ??? ??(???)? ????? ???? &? ??? ??(&a). ??? ???? ??(???, ???? ????) ????? int a;? ??? ??? ????? ?? ??? ????? int *pa;? a? ???? ??? pa? ???? ?????? pa == &a??.
????? *? ?? ????? ??? ??, ?? ????? ?? ??? ?(???)? ????(???)??? *&a == *pa??. ?? a == *&a == *pa??. (?? ??? ??? == ? ??)
??(swap)???? ????? ????(call by reference)?? ???? *pa = xx? ???? ?? ???? ?? ?? ????? ??? ?? ?? ??? ?? ??? ?? ?? ?? ??? =? ???? ????? ??? ??? ?? xx? ????.
?? ??? ??? ?? ??? ??.
??? - ???(?????? ?? ??? ??)? ???? ??
??? ?? - ????? ??? ???? ??? ?? ??? ???? ?? ??? ?? ?? ??
??? ?? - ??? ???? ?? ?? ??? ? ??(?? ???? ????? ??? ???? ????? ??? ? ??? ??)
?? - ??? ???(????)? ??? ??? ??? 1 ???? ? ??, ??? ??? ?? ??? ??? 4 ??? ???? ?? 4 ??? ??? ??, ?? ??? ??? ?? ??? ??? 8 ??? ???? ?? 8 ??? ??? ??, ??
????: ??? ???? ???? ???(?????) ??
????: ??? ??? ?? ???? ????? ??
int exp_a;
int * exp_a_p; (int* exp_a_p;, int *exp_a_p;)
exp_a = 12;
exp_a_p == &exp_a;
*exp_a_p == *&exp_a == exp_a == 12;
?? ?? - ?? ???(?? ???&? ??) ???, &exp_a
1. ???(???) - ??? ??? ??
2. ?? ?? - (??? ??) ?? ??? (?????) ??
3. ?? ?? - ??? ?? ?? ???? ?? ??
??? exp_a_p - ?????? ?? ??? ??? ??? ??
1. ???(???) - ????(??, ????, pointing) ?? ??? ??? ?? ??, ???
2. ?? - ???(???, ???, pointing) ??? ?? ????(??, ???)? ?????? ??? ????? ??
3. ?? - ????? ????? ??? ??? ???? ?? ??
???, ??, ??, pointing = ??, ??? ??(??)
???? ?, ?? ??? ??? ?? ??, ?????? ?? ????? ?
1. ??? ?? ???? ??? ??? ???? ??(??)??? ??? ??? ??(r value)?? ?? ??? ?? ?? ???? ???(? ??) ???? ???? ????(??)
2. ??? ?? ???? ??? ??? ???? ??? ??(??, ????)??? ??? ??? ??(l value)?? ?? ??? ?? ?? ???? ???(??? ??) ??? ???? ???? ????(??)
??? ???? ??(??)?? ?? ?? ??? ? ??
?? ??
int * pa = &a; ??? ???? ?? a? ??? ??? ?? pa? ??
??? ?? pa? a? ?? &a? ???? ???? pa == &a
*pa? a? ?? &a? ?? ????? a? ?????? *pa == *&a == a
&pa? ??? ?? pa ??? ??, ?? ????? ?? scanf?? ???? ?? a? ?? ??? ? ?? ? ?? &a? ?? ??
scanf?? ???? ?? a? ?? ??? ? ?? ? ?? &a? ?? ??
??? - ??? ???? ??(??????? ??? ??, ??: ??? ??? ???)
32?? CPU??? ??? ?
[??]
?? ??? x386?? ???? ?? ?? ?? ?? ? ???
&a[0] = 0x0040DF04 &pa = 0x0040DF00 pa = 0x0040DF04 fun = 0x00401060
int a[10];
int *pa;
void fun(int cnt);
void printvar()
{
printf("&a[0] = 0x%08X\n", &a[0]);
printf("&pa = 0x%08X\n", &pa);
printf("pa = 0x%08X\n", pa);
printf("fun= 0x%08X\n", (int) fun);
return;
}
void fun(int cnt)
{
pa = a;
while (cnt) {
*pa = cnt;
pa++;
cnt--;
}
}
?? int *pa;
? ?? ??? ??? ?? ??? ??? ???? ????? ???. ??? ??? ??? ???? ???? ?? ???, ??? ???? ??? ???? ????.
?? ? ??
[??]C???? ??? ????? ????? ??. ??? ???? ??? ??? ? ??? ???? ???? ??. ?????? ???. ??? ??? ??? ?? ??? ? ??? ??? ??? ???? ??? ???? ??? ? ?? ??. ? ??? ???? ?? ?? ??? ????.
C??? ????? ???? ??? ?? ?? malloc() ??? ???? ??? ????? ????. ?? ??? ??? ??? ??.
- ?? : malloc() : ??????? ??? ??? ?? ???.
- ??? : realloc(): ?? ??? ??? ??? ??? ????.
- ?? : free() : ? ?? ? ??? ?? ??? ??? ???? ????.
??? ??? ???? free() ??? ????. ??? ??? ??? ?? ?????. ????? ??? ??? ?(heap) ??? ???? ?? ?? ??? ????. ? ?????? ? ??? ??? ??? ?? ??? ??? malloc() ??? ???? ???? ?? ? ??. ??? ???? free() ??? ??? ??? ??. ?? ?? ??? ?? ??? ???? NULL? ????.
int main(int argc, char *argv[])
{
int *pa = NULL;
// ...
pa = (int *) malloc( sizeof(int));
if (pa == NULL) { // malloc()? NULL ???? ?? ??.
printf("???? ?? ??.\n");
return -1;
}
*pa = 10;
printf("&pa = 0x%08X\n", &pa);
printf("pa = 0x%08X - ??? %d\n", pa, *pa);
// ...
if (pa) free(pa); // ?? ? ?? ??? ????.
return 0;
}
C++??? new? delete? ?? ???. ??? ???? malloc() ?? ??? ?? ??? ????. ??? ???? ?????, ???? ???? ?? ??.
??? ??
[??]???? ?? ??? ??? ?? ?????. ?, 32?? ????? ???? 4??? ????, 64?? ????? ???? 8??? ?????. ???? ??? ??? ?? ??? ????.
- ???? ?? : ?? ?????? n??? ??? ??? ???? ????.
?? ???? ???? ?? ??
[??]????? ???? ?????. MFC? ?? ?? ????? ??, ??? ?? ?? ??? ??? ?? ?? ????? ??? ? ??. ?? ??? ???? ????.
?? ?? ?? ???? ??? ??? ??? ???? ????. ?????? ?? ?? ??? ??? ?? ??? ???? ?????, ?? ??? ??? ?? ??? ?? ?? ???? ??? ??? ??? ? ??? ??.
- ?? : ?? ????? ??? ?? ??? ???. ?? ??? ??? ?? ??? ??? 2?? ??? ??.
- ??? : ?? ??? ??? ??? ??? ????.
- ?? : ? ?? ? ??? ?? ??? ??? ?? ??? ????.
? ??? ??? ????? ?? ?? ????? ??? ??, ? ? ?? ??, ??? ?? ??? ?? ??? ????.
?? ??
[??]?? ??
[??]- (??) Ritchie, Dennis M. The Development of the C Language??? 2025-08-07 - ??? ??. History of Programming Languages-II. Second History of Programming Languages conference, Cambridge, Massachusetts, April, 1993. ISBN 0-201-89502-1.
- Richard M. Stallman: Using and Porting the GNU Compiler Collection, Free Software Foundation, ISBN 0-595-10035-X
- Richard M. Stallman: Using Gcc: The Gnu Compiler Collection Reference, Free Software Foundation, ISBN 1-882114-39-6
- Brian J. Gough: An Introduction to GCC, Network Theory Ltd., ISBN 0-9541617-9-3