NYOJ 224 조명사 샤오밍

5387 단어 OJ
         ,     ,           ,        ,           ,       ,    ,      ,     。             ,    
1
#include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 int light[1000010];// , , , 。 , , 5 int main() 6 { 7 int n,t,m,sum=0; 8 char str[10]; 9 memset(light,0,sizeof(light)); 10 scanf("%d%d",&n,&t); 11 while(t--) 12 { 13 scanf("%s",str); 14 if(strcmp(str,"CHANGE")==0) 15 { 16 scanf("%d",&m); 17 if(light[m]==0) {light[m]=1;sum++;} 18 else {light[m]=0;sum--;} 19 } 20 else printf("%d
",sum); 21 } 22 system("pause"); 23 return 0; 24 }

 
추가 정보:
함수에 정의된 변수, 창고에 생성된 변수, 전역에 정의된 변수, 데이터 세그먼트에 생성된 변수.당신의 그룹이 너무 커서 창고가 넘쳐서 프로그램 오류가 발생할 수 있습니다.스택은 2M 크기로 알려져 있고 데이터 세그먼트는 매우 크며 얼마나 큰지는 시스템 환경과 관련이 있는 것 같다.수조가 함수에 정의되었을 때 차지하는 메모리는 창고 공간에서 나온다. 창고 공간은 프로세스를 만들 때 초기화되고 고정된 크기가 있으며 보통 몇 십 KB이기 때문에 너무 큰 수조는 창고 공간을 다 소모할 수 있다.
반면 글로벌 변수가 차지하는 데이터 세그먼트 공간은 32비트 시스템에서 4GB까지 커질 수 있다.전역 변수와 국부 변수는 같은 저장소에 있지 않습니다. 창고의 연속 빈 메모리는 c[100002]를 수용하기에 부족합니다. (너무 크지만 10002를 수용할 수 있기 때문에 뒤에 10002로 바꾸면 됩니다.) 그래서main에 놓고 실행할 때 오류가 발생했습니다. 전역 그룹으로 이동하여 전역 저장소에 저장하고 충분한 메모리가 있기 때문에 OK를 실행합니다.전역 변수를 사용하는 장점은 변수의 개수를 줄이고 실제 파라미터와 형식 파라미터의 데이터 전달으로 인한 시간 소모를 줄일 수 있다는 것이다.그러나 전역 변수를 사용하는 것도 많은 단점이 있다. (1) 전역 변수는 정적 저장소에 저장되고 프로그램이 실행될 때 메모리를 분배하며 프로그램이 끝날 때 이 메모리를 방출한다.국부 변수의 동적 분배, 동적 방출에 비해 생존 기간이 길기 때문에 너무 많은 전역 변수는 비교적 많은 메모리 단원을 차지한다.(2) 전역 변수는 함수의 봉인 성능을 파괴한다.앞에서 말한 바와 같이 함수는 블랙박스와 같아서 일반적으로 함수 매개 변수와 반환 값을 통해 입력과 출력을 하고 함수 내부는 상대적으로 독립을 실현한다.그러나 함수에서 전역 변수를 사용하면 함수 체내의 문장은 함수 매개 변수와 반환 값을 돌려 접근할 수 있다. 이런 상황은 함수의 독립성을 파괴하고 함수가 전역 변수에 의존하게 한다.이 함수의 이식성도 낮아졌다.(3) 전역 변수는 함수의 코드 가독성을 떨어뜨린다.여러 함수가 전역 변수를 사용할 수 있기 때문에 함수가 실행될 때 전역 변수의 값은 수시로 변화할 수 있어 프로그램의 오류와 디버깅에 매우 불리하다.따라서 만부득이하지 않으면 전역 변수를 사용하지 않는 것이 좋다.
글로벌 변수 및 로컬 변수: 링크:http://hi.baidu.com/huiweics/item/4f0845599701fc0ce6c4a571

좋은 웹페이지 즐겨찾기