cÓëc++ staticº¯ÊýµÄÇø±ð
cÓëc++ staticº¯ÊýµÄÇø±ð
c
Óëc++ static
º¯ÊýµÄÇø±ð
static
¹Ø¼ü×ÖÊÇ
C, C++
Öж¼´æÔڵĹؼü×Ö
,
ËüÖ÷ÒªÓÐÈýÖÖʹÓ÷½Ê½
,
ÆäÖÐÇ°Á½ÖÖÖ»Ö¸ÔÚ
C
ÓïÑÔÖÐʹÓÃ
,
µÚÈýÖÖÔÚ
C++
ÖÐʹÓÃ
(C,C++
ÖоßÌåϸ΢²Ù×÷²»¾¡Ïàͬ
,
±¾ÎÄÒÔ
C++
Ϊ׼
).
(1)
¾Ö²¿¾²Ì¬±äÁ¿
(2)
Íⲿ¾²Ì¬±äÁ¿
/
º¯Êý
(3)
¾²Ì¬Êý¾Ý³ÉÔ±
/
³ÉÔ±º¯Êý
ÏÂÃæ¾ÍÕâÈýÖÖʹÓ÷½Ê½¼°×¢ÒâÊÂÏî·Ö±ð˵Ã÷
Ò»¡¢¾Ö²¿¾²Ì¬±äÁ¿
ÔÚ
C/C++
ÖÐ
,
¾Ö²¿±äÁ¿°´ÕÕ´æ´¢ÐÎʽ¿É·ÖΪÈýÖÖ
auto, static, register
(<C
ÓïÑÔ³ÌÐòÉè¼Æ
(
µÚ¶þ°æ
)>
Ì·ºÆÇ¿
,
µÚ
174-175
Ò³
)
Óë
auto
ÀàÐÍ
(
ÆÕͨ
)
¾Ö²¿±äÁ¿Ïà±È
, static
¾Ö²¿±äÁ¿ÓÐÈýµã²»Í¬
1.
´æ´¢¿Õ¼ä·ÖÅ䲻ͬ
auto
ÀàÐÍ·ÖÅäÔÚÕ»ÉÏ
,
ÊôÓÚ¶¯Ì¬´æ´¢Àà±ð
,
Õ¼¶¯Ì¬´æ´¢Çø¿Õ¼ä
,
º¯Êýµ÷ÓýáÊøºó×Ô¶¯ÊÍ·Å
,
¶ø
static
·ÖÅäÔÚ¾²Ì¬´æ´¢Çø
,
ÔÚ³ÌÐòÕû¸öÔËÐÐÆڼ䶼²»ÊÍ·Å
.
Á½ÕßÖ®¼äµÄ×÷ÓÃÓòÏàͬ
,
µ«Éú´æÆÚ²»Í¬
.
2. static
¾Ö²¿±äÁ¿ÔÚËù´¦Ä£¿éÔÚ³õ´ÎÔËÐÐʱ½øÐгõʼ»¯¹¤×÷
,
ÇÒÖ»²Ù×÷Ò»´Î
3.
¶ÔÓÚ¾Ö²¿¾²Ì¬±äÁ¿
,
Èç¹û²»¸³³õÖµ
,
±àÒëÆÚ»á×Ô¶¯¸³³õÖµ
0
»ò¿Õ×Ö·û
,
¶ø
auto
ÀàÐ͵ijõÖµÊDz»È·¶¨µÄ
. (
¶ÔÓÚ
C++
ÖеÄ
class
¶ÔÏóÀýÍâ
, class
µÄ¶ÔÏóʵÀýÈç¹û²»³õʼ»¯
,
Ôò»á×Ô¶¯µ÷ÓÃĬÈϹ¹Ô캯Êý
,
²»¹ÜÊÇ·ñÊÇ
static
ÀàÐÍ
)
Ìصã
: static
¾Ö²¿±äÁ¿µÄ”¼ÇÒäÐÔ”ÓëÉú´æÆڵĔȫ¾ÖÐÔ”
Ëùν”¼ÇÒäÐÔ”ÊÇÖ¸ÔÚÁ½´Îº¯Êýµ÷ÓÃʱ
,
ÔÚµÚ¶þ´Îµ÷ÓýøÈëʱ
,
Äܱ£³ÖµÚÒ»´Îµ÷ÓÃÍ˳öʱµÄÖµ
.
ʾÀý³ÌÐòÒ»
#include <iostream>
using namespace std;
void staticLocalVar()
{
static int a = 0; //
ÔËÐÐÆÚʱ³õʼ»¯Ò»´Î
,
Ï´ÎÔÙµ÷ÓÃʱ
,
²»½øÐгõʼ»¯¹¤×÷
cout<<"a="<<a<<endl;
++a;
}
int main()
{
staticLocalVar(); //
µÚÒ»´Îµ÷ÓÃ
,
Êä³ö
a=0
staticLocalVar(); //
µÚ¶þ´Îµ÷ÓÃ
,
¼ÇÒäÁ˵ÚÒ»´ÎÍ˳öʱµÄÖµ
,
Êä³ö
a=1
return 0;
}
Ó¦ÓÃ
:
ÀûÓÔ¼ÇÒäÐÔ”
,
¼Ç¼º¯Êýµ÷ÓõĴÎÊý
(
ʾÀý³ÌÐòÒ»
)
ÀûÓÃÉú´æÆڵĔȫ¾ÖÐÔ”
,
¸ÄÉÆ”
return a pointer / reference to a local object
”µÄÎÊÌâ
. Local object
µÄÎÊÌâÔÚÓÚÍ˳öº¯Êý
,
Éú´æÆÚ¼´½áÊø
,.
À
Ïà¹ØÎĵµ£º
Ô´Âë:
# include <stdio.h>
int main()
{
int x, y, num1, num2, temp;
printf("ÇëÊäÈëÁ½¸öÕýÕûÊý£º\n");
scanf("%d %d", &num1, &num2);
if(num1 < num2)
......
Ô´Â룺
# include <stdio.h>
void swap(int *x, int *y);
int main()
{
int i, j;
i = 12;
j = 36;
printf("i and j before swapping: %d %d\n", i, j);
&nbs ......
ÊéÖÐÓм¸¸öÎÊÌâÓеãÄ£ºý¡£¼Ç¼һÏ¡£
Answer to Exercise 1-7
Write a program to print the value of EOF .
#include <stdio.h>
int main(void)
{
printf("The value of EOF is %d\n\n", EOF);
return 0 ......
¼´Ê¹½«VirtualBox°²×°µ½±ðµÄÅÌÉÏ£¬Æä×ö³ÉµÄÐéÄâ»ú£¨ÏµÍ³£¬Ó²ÅÌ£©ÈÔ»áĬÈÏÉú³Éµ½ÏµÍ³ÅÌ£¬Ä¬ÈÏC:ÅÌÉÏ£¬Ëæ×ÅÐé»úÊýÁ¿ºÍÄÚÈÝÔö¼Ó¼·Õ¼Á˱¾À´¾Í²»´óµÄϵͳÅ̿ռ䣬ºÜÊDz»±ã¡£
¿ªÊ¼½«C:ÅÌÏÂ.VirtualBoxĿ¼ÏµĶ«Î÷È«ÅÌ¿½±´ÖÁ±ð´¦,È»ºóÔÚVirtualBoxµÄÎļþ/»·¾³ÉèÖà Öн«¡ºÄ¬ÈÏÓ²ÅÌĿ¼¡»ºÍ¡ºÄ¬ÈϼÙÏë»úÆ÷¡»×öÏàÓ¦µÄÐÞ ......
C±êʶ·ûÁ´½ÓÓÐ3ÖÖÐÎʽ£ºÍⲿÁ´½ÓµÄ±êʶ·û£¬ÄÚ²¿Á´½ÓµÄ±êʶ·û£¬ÎÞÁ´½ÓµÄ±êʶ·û
ÍⲿÁ´½ÓµÄ±êʶ·û£º´æ´¢Àà±êʶ·ûʹÓà extern ÐÞÊΣ¬»òÎÞ´ËÀàÐÞÊηûÐÞÊΣ¨ÏµÍ³Ä¬ÈÏΪextern £© ||¿ÉÔÚÆäËûÔ´´úÂëÎļþÖÐʹÓÃ
ÄÚ²¿Á´½ÓµÄ±êʶ·û£º ʹÓà static ÐÞÊÎ || Ö»¿ÉÔÚµ±Ç°Ô ......