C puzzle(1)
7110 단어 c
1. 다음 예상 출력 은 배열 array [] 의 각 요소 이 고 실제 출력 결 과 는 비어 있 습 니 다.
#include<stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};
int main()
{
for(int d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d
",array[d+1]);
return 0;
}
분석: sizeof 연산 자 는 바이트 형식 으로 연산 자의 저장 크기 를 보 여 줍 니 다. 그 중에서 작업 수 는 하나의 표현 식 이나 괄호 안에 포 함 된 유형 명, 즉 sizeof (type), sizeof (var name) 또는 sizeof var 일 수 있 습 니 다.name, 연산 자의 저장 크기 는 연산 자의 형식 에 의 해 결정 되 며, unsigned 형식 으로 되 돌아 갑 니 다. 이렇게 TOTALELEMENTS - 2 는 5 입 니 다.d 는 int 형식 으로 부호 가 없 는 TOTALELEMENTS - 2 를 비교 할 때 부호 없 는 타 입 보 호 를 하고 unsigned 타 입 으로 전환 하기 때문에 for 의 조건 은 가짜 로 판단 하고 순환 에서 벗 어 납 니 다.IEEE 의 메모리 구조 에 따 르 면 기호 양수 의 가장 높 은 위 치 는 표지 위치 로 양수, 양수 의 가장 높 은 위 치 는 0 이 고 음수 의 가장 높 은 위 치 는 1 이 므 로 바 이 너 리 를 비교 할 때 음 수 는 양수 보다 영원히 크다.
(\ # define 의 용법 은 http://blog.csdn.net/benny5609/article/details/2314541 참조)
다음 과 같이 수정 하면 실행 할 수 있 습 니 다.
int m=TOTAL_ELEMENTS-2;
for(int d=-1;d <= m;d++)
printf("%d
",array[d+1]);
아직도 몰라!!!꼬 임 T0T...
========================================================================
2. 실행 할 수 없 음:
void OS_Solaris_print()
{
printf("Solaris - Sun Microsystems
");
}
void OS_Windows_print()
{
printf("Windows - Microsoft
");
}
void OS_HP-UX_print()
{
printf("HP-UX - Hewlett Packard
");
}
int main()
{
int num;
printf("Enter the number (1-3):
");
scanf("%d",&num);
switch(num)
{
case 1:
OS_Solaris_print();
break;
case 2:
OS_Windows_print();
break;
case 3:
OS_HP-UX_print();
break;
default:
printf("Hmm! only 1-3 :-)
");
break;
}
return 0;
}
원인: 변수 이름 은 알파벳, 숫자 와구성, 그리고 첫 번 째 문 자 는 알파벳 이 어야 합 니 다!!
===========================================================================
3. contine 은 for, while, do - while 문 구 를 사용 하여 다음 순환 을 시작 합 니 다. while 와 do - while 문 구 는 contine 이 테스트 부분 을 즉시 실행 하 는 것 을 의미 합 니 다.for 순환 에서 제어 가 순환 변수 부분 으로 이동 하 는 것 을 의미 합 니 다.contine 은 순환 문 에 만 사용 되 며 switch 문 구 는 사용 되 지 않 습 니 다.
break 문 구 는 for, while, do - while 등 순환 에서 미리 종료 하 는 데 사 용 됩 니 다.break 는 프로그램 을 switch 문장 이나 가장 안쪽 순환 에서 바로 뛰 어 나 오 게 할 수 있다.
===========================================================================
4. 프로그램 출력 "hello - out"
#include <stdio.h>
#include <unistd.h>//VS , <windows.h> Sleep()
int main()
{
while(1)
{
fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
sleep(100);
}
return 0;
}
프로그램 이 hello - outhello - err 를 연속 으로 출력 하여 자동 으로 전 환 됩 니 다.stdout -- 표준 출력 장치 (printf ("...");stderr -- 표준 오류 출력 장치.둘 은 기본적으로 화면 으로 출력 합 니 다.
그러나 디스크 파일 에 전향 표준 으로 출력 하면 차이 점 을 알 수 있다.stdout 은 디스크 파일 로 출력 하고 stderr 는 화면 에 있 습 니 다.사용법:
fprintf(stderr, "Can't open it!");
fprintf(stdout, "Can't open it!");
========================================================================
5. 다음 프로그램 실행 결 과 는 12 입 니 다. f(1,2)
#include <stdio.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main()
{
printf("%s
",h(f(1,2)));
printf("%s
",g(f(1,2)));
return 0;
}
여기 서 매크로 의 전개 순 서 를 말 해 야 합 니 다. 만약 에 매크로 에 인자 가 있다 면 f (a, b) 중의 a 와 b 는 우 리 는 형 삼 이 라 고 부 릅 니 다. 매크로 의 실제 매개 변 수 는 우 리 는 실제 인삼 이 라 고 부 릅 니 다. 예 를 들 어 f (1, 2) 중의 1 과 2 등 입 니 다.매크로 의 전 개 는 매우 복잡 한 과정 이지 만 다음 과 같은 세 단계 로 간단하게 설명 할 수 있다.
먼저 실제 인삼 으로 형 삼 을 교체 하고 실제 인삼 을 매크로 텍스트 에 대 입 합 니 다.
그리고 실 삼 도 홍 이 라면 실 삼 을 펼 칩 니 다.
마지막 으로 매크로 교체 후의 매크로 텍스트 를 계속 처리 합 니 다. 매크로 텍스트 에 도 매크로 가 포함 되 어 있 으 면 계속 펼 쳐 집 니 다. 그렇지 않 으 면 펼 쳐 집 니 다.
그러나 예외 가 있 습 니 다. 그것 은 첫 번 째 단계 에서 실제 인삼 을 매크로 텍스트 에 대 입 한 후에 실제 인삼 을 만 나 기 전에 문자 '\ #' 또는 '\ # #' 를 만나면 실제 인삼 이 매크로 라 고 하 더 라 도 실제 인삼 을 펼 치지 않 고 텍스트 로 처리 하 는 것 입 니 다.a \ # \ # b 는 연결 을 표시 하고 결 과 는 ab; \ #a 는 따옴표 를 표시 하고 결 과 는 'a' 이다.
===========================================================================
6. 특정한 수의 바 이 너 리 중 1 의 개 수 를 계산 하고 프로그램 은 다음 과 같다.
int CountBits (unsigned int x )
{
static unsigned int mask[] = { 0x55555555,
0x33333333,
0x0F0F0F0F,
0x00FF00FF,
0x0000FFFF
} ;
int i ;
int shift ; /* Number of positions to shift to right*/
for ( i =0, shift =1; i < 5; i ++, shift *= 2)
x = (x & mask[i ])+ ( ( x >> shift) & mask[i]);
return x;
}
이분법.논리 분석 참고 http://wjboy49.iteye.com/blog/695395
==========================================================================
7. fun (void) 과 fun () 의 차이 점:
C + + 에 서 는 함수 fun 이 어떠한 인자 도 받 아들 이지 않 음 을 나타 내 고 fun (a) 는 컴 파일 할 수 없어 서 오 류 를 보고 합 니 다.C 에서 fun (void) 을 정의 하면 fun (a) 는 컴 파일 할 수 없어 서 오 류 를 보고 하고 fun () 을 정의 하면 fun (a) 는 컴 파일 하여 실행 할 수 있 습 니 다.
============================================================================
8. 다음 프로그램 출력 은 0 1095237632
int main()
{
float a = 12.5;
printf("%d
", a);
printf("%d
", *(int *)&a);
return 0;
}
원인:% d 는 10 진 정수 로 인쇄 합 니 다.%6d 는 10 진 정수 에 따라 최소 6 글자 너비 로 인쇄 합 니 다.%f. 부동 소수점 에 따라 인쇄 하기;%6f 부동 소수점 에 따라 인쇄 합 니 다. 최소 6 글자 너비;%.2f 부동 소수점 에 따라 인쇄 하고 소수점 뒤에 두 개의 소수 가 있 습 니 다.%6.2f 부동 소수점 에 따라 인쇄 하고 최소 6 글자, 소수점 뒤에 두 개의 소수 가 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.