C 언어 필기시험 문제 (1)

3613 단어 c기억언어.
1、
 #include
#include
int main(void)
{
        char a[30];
        char *b = (char *)malloc(20 * sizeof(char));
        printf("%d/n", sizeof(a));
        printf("%d/n", sizeof(b));
        printf("%d/n", sizeof(a[3]));
        printf("%d/n", sizeof(b+3));
        printf("%d/n", sizeof(*(b+4)));/
        return 0 ;
}
answer: 30  4  1 4 1
2. 변수의 정의 와 성명 의 차이
우 리 는 프로그램 설계 에서 시시각각 변수의 정의 와 변수의 성명 을 사용한다. 그러나 때때로 우 리 는 이 개념 에 대해 잘 알 지 못 하고 어떻게 사용 하 는 지 알 지만 어떻게 된 일 인지 모르겠다. 다음은 나 는 간단하게 그들의 차 이 를 다음 과 같이 소개 한다. (나의 조언 이 너 에 게 이익 을 주 기 를 바란다)
변수의 성명 은 두 가지 상황 이 있 습 니 다.
하 나 는 저장 공간 을 만들어 야 한다.int  a  성명 할 때 이미 저장 공간 을 만 들 었 다.
다른 하 나 는 저장 공간 을 만 들 필요 가 없다 는 것 이다. 예 를 들 어 extern int a 에서 변 수 는 다른 파일 에서 정 의 된 것 이다.
전 자 는 '정의 성 성명 (defining declaration)' 또는 '정의 (definition)' 이 고 후 자 는 '인용 성 성명 (referencing declaration)' 이다.
넓 은 의미 에서 볼 때 성명 에는 정의 가 포함 되 어 있 지만 모든 성명 이 정의 되 어 있 는 것 은 아니다. 예 를 들 어 int a 는 성명 이자 정의 이다.그러나 extern int a 에 있어 서 그것 은 단지 성명 일 뿐 정의 가 아니다.일반적인 상황 에서 우 리 는 공간 을 만 드 는 성명 을 '정의' 라 고 부 르 고 저장 공간 을 만 들 필요 가 없 는 것 을 '성명' 이 라 고 부른다.우리 가 여기 서 말 하 는 생명 은 범위 가 비교적 좁다 는 것 이 분명 하 다. 즉, 비 정의 적 인 성명 이다. 예 를 들 어 주 함수 에서
 int main() 
{ 
   extern int A; //          ,  A             
          //do something 
}
//  :                 :extern A; dosth(); 
 
int A; //   ,   A         

외부 변수의 '정의' 는 외부 변수의 '성명' 과 다 릅 니 다. 외부 변수의 정 의 는 한 번 만 있 을 수 있 습 니 다. 그 위 치 는 모든 함수 외 에 있 습 니 다. 같은 파일 의 외부 변 수 는 여러 번 설명 할 수 있 습 니 다. 함수 안에 있 을 수도 있 고 함수 밖 에 있 을 수도 있 습 니 다. (외부 변수의 정의 점 전에)。시스템 은 외부 변수의 정의 (외부 변수의 성명 이 아 닌) 에 따라 저장 공간 을 분배 합 니 다.외부 변수 에 있어 초기 화 는 '성명' 이 아 닌 '정의' 에서 만 가능 합 니 다.이른바 '성명' 의 역할 은 이 변 수 는 뒤에 정 의 된 외부 변수 로 '이 변 수 를 미리 인용 하기 위 한' 성명 '일 뿐이다.extern 은 성명 만 하고 정 의 를 내리 지 않 습 니 다.
static 로 변수의 역할 을 설명 하 는 것 은 두 가지 가 있 습 니 다.
(1)   부분 변수 에 대해 static 로 설명 하면 이 변 수 를 위 한 공간 은 전체 프로그램의 실행 기간 내 에 항상 존재 합 니 다.
(2)   외부 변 수 는 static 로 설명 하면 이 변수의 역할 은 이 파일 모듈 에 만 제 한 됩 니 다 (감사합니다.
legion8169

3. strcpy 와 memcpy 의 차이 점:
strcpy (strncpy) 와 memcpy 에 자주 사용 되 는데 복사 하 는 과정 에서 어떤 차이 가 있 습 니까?
strcpy 는 문자열 을 복사 하 는 것 입 니 다. 복사 할 때 문자 '/ 0' 을 만나면 복사 가 중 단 됩 니 다 (즉, 이 바이트 가 0x 00 입 니 다. 물론 문자 '0' 은 '/ 0' 이 아 닙 니 다).반면 memcpy 는 복사 한 데이터 의 값 이 무엇 인지 신경 쓰 지 않 고 사용자 가 지정 한 수량의 데 이 터 를 복사 합 니 다.
아래 의 이 예 를 보 세 요.
int main(){      int i;      char set1[20],set2[20];      bzero(set1,20);      bzero(set2,20);      strcpy(set1,"hello world!");      set1[8]=0;      strcpy(set2,set1);      printf("%s/n",set2);      for(i=0;i<20;i++){          printf("%c",set2[i]);          }      printf("/n");      memcpy(set2,set1,20);      printf("%s/n",set2);      for(i=0;i<20;i++){          printf("%c",set2[i]);            }      printf("/n");

배열 set 1 에 "hello World!" 를 먼저 넣 고 set [8] 를 문자열 끝 표지 '/ 0' 으로 설정 합 니 다.
strcpy 와 memcpy 로 각각 복사 한 결 과 를 살 펴 보 겠 습 니 다.
프로그램 실행 결 과 는 다음 과 같다.
hello wo
hello wo
hello wo
hello wold!
strcpy 가 hello wo 라 는 글자 만 복사 한 것 을 볼 수 있 습 니 다.
memcpy 는 set 1 의 모든 문 자 를 복사 했다.

좋은 웹페이지 즐겨찾기