반응형

c 32

C의 함수에서 재할당을 사용하는 방법

C의 함수에서 재할당을 사용하는 방법 여기서 배운 것을 바탕으로 C의 함수를 통해 동적 배열을 조작합니다. void test(int data[]) { data[0] = 1; } int main(void) { int *data = malloc(4 * sizeof *data); test(data); return 0; } 이것은 잘 작동합니다.하지만, 저는 또한 사용하려고 노력하고 있습니다.realloc행사 중에 void increase(int data[]) { data = realloc(data, 5 * sizeof *data); } 이는 준수하지만 실행 시 프로그램이 충돌합니다. 질문. 기능에서 재할당을 어떻게 사용해야 합니까? 저는 제가 그 결과를 할당해야 한다는 것을 이해합니다.realloc변수로 이동..

sourcetip 2023.07.22

C에서 참조로 구조 전달

C에서 참조로 구조 전달 이 코드가 맞습니까?예상대로 실행되지만, 이 코드가 구조체에 대한 포인터와 점 표기법을 올바르게 사용하고 있습니까? struct someStruct { unsigned int total; }; int test(struct someStruct* state) { state->total = 4; } int main () { struct someStruct s; s.total = 5; test(&s); printf("\ns.total = %d\n", s.total); } 포인터와 점 표기법을 사용하는 것이 좋습니다.컴파일러는 문제가 있는 경우 오류 및/또는 경고를 제공해야 합니다. 다음은 구조체, 포인터, 함수 및 변수 범위의 사용에 대한 추가적인 참고 사항과 함께 코드의 복사본입니다...

sourcetip 2023.07.22

쉼표 연산자의 역할은 무엇입니까?

쉼표 연산자의 역할은 무엇입니까? 다음 코드는 C/C++에서 무엇을 합니까? if (blah(), 5) { //do something } 쉼표 연산자가 적용되고 값 5가 조건의 참/거짓을 결정하는 데 사용됩니다. blah()를 실행하고 무엇인가를 반환한 다음(아마도) 쉼표 연산자가 사용되고 5만 식의 참/거짓 값을 결정하는 데 사용됩니다. blah() 함수의 반환 유형(지정되지 않음)에 대해 , 연산자가 오버로드되어 결과가 분명하지 않을 수 있습니다.쉼표 연산자가 오버로드되지 않은 경우 코드는 다음과 유사합니다. blah(); if (5) { // do something } 쉼표 연산자가 오버로드된 경우 결과는 해당 함수를 기반으로 합니다. #include #include using namespace s..

sourcetip 2023.07.22

경계를 벗어나는 대신 초기화되지 않은 이유는 무엇입니까?

경계를 벗어나는 대신 초기화되지 않은 이유는 무엇입니까? 아래 코드에서 이유는b[9]초기화되지 않은 상태로 유지할 수 있습니까? #include int main(void) { char b[] = {'N', 'i', 'c', 'e', ' ', 'y', 'o', 'u', '!'}; printf("b[9] = %d\n", b[9]); return 0; } 컴파일러 호출: % gcc -O2 -W -Wall -pedantic -c foo.c foo.c: In function ‘main’: foo.c:6:5: warning: ‘b[9]’ is used uninitialized in this function [-Wuninitialized] printf("b[9] = %d\n", b[9]); % gcc --versio..

sourcetip 2023.07.07

C에서 포인터가 이미 해제되었는지 어떻게 확인합니까?

C에서 포인터가 이미 해제되었는지 어떻게 확인합니까? 포인터가 이미 해제되었는지 확인하고 싶습니다.gnu 컴파일러 세트를 사용하여 이것을 어떻게 합니까? 그럴수는 없어요.이를 추적하는 방법은 포인터를 다음에 할당하는 것입니다.0또는NULL그것을 해방시킨 후에.그러나 Fred Larson이 언급했듯이, 이것은 동일한 위치를 가리키는 다른 포인터에는 아무런 영향을 주지 않습니다. int* ptr = (int*)malloc(sizeof(int)); free(ptr); ptr = NULL; 그럴수는 없어요.그냥 할당NULL당신 뒤에 있는 것.free그것은 당신이 그것을 두 번 풀어주지 않도록 확실히 하기 위해. (괜찮아요.free(NULL)). 더 좋은 것은 가능하면 "잊어버린" 곳에 코드를 쓰지 않는 것입니다..

sourcetip 2023.07.02

2d 배열은 이중 포인터입니까?

2d 배열은 이중 포인터입니까? 이 질문에는 이미 다음과 같은 답이 있습니다. 이중 포인터를 사용하여 2차원 배열을 표현할 수 없는 이유는 무엇입니까? (6개 답변) 마감됨6년 전에. int main() { matrix[2][4] = {{11,22,33,99},{44,55,66,110}}; int **ptr = (int**)matrix; printf("%d%d",**matrix,*ptr); } 그러나 2-d 배열이 매개 변수로 전달되면 컴파일러는 이 배열을 어떤 유형으로 저장합니까?2-D 배열 또는 이중 포인터 또는 배열에 대한 포인터로 저장합니다.어레이로 저장하는 경우 위와 같은 다양한 상황에서 어떻게 다르게 해석합니까?제가 이해할 수 있도록 도와주세요. 2d 배열은 이중 포인터입니까? 아닙니다. 프로..

sourcetip 2023.07.02

C 또는 C++에서 At 기호(@)와 달러 기호($)는 특별한 의미가 있습니까?

C 또는 C++에서 At 기호(@)와 달러 기호($)는 특별한 의미가 있습니까? 최근 제 친구 중 한 명이 인터뷰에서 이 질문을 접했습니다.인터뷰 진행자는 그에게 그 특별한 캐릭터들이 좋아하는 것인지 물었습니다.$, @, |, ^, ~c 또는 c++ 및 장소에서 사용됩니다. 나는 그것을 알고 있습니다.|, ^ and ~각각 Bitwise OR, XOR 및 Complement로 사용됩니다. 하지만 저는 모르겠어요.@ and $특별한 의미가 있습니다.만약 그렇다면, 어디에 적용할 수 있는지 예를 들어 주시겠습니까?@C에서는 일반적으로 유효하지 않습니다. 어떤 용도로도 사용되지 않습니다.Objective-C에서 다양한 용도로 사용되지만, 그것은 전혀 별개의 문제입니다. $또한 유효하지 않지만 대부분의 구현에서..

sourcetip 2023.06.22

-I dir vs. -I system dir

-I dir vs. -I system dir 헤더 파일을 검색할 디렉토리를 포함하려면 어떤 방법이 선호되며 그 이유는 무엇입니까?이것을 보는 한 가지 방법은 사용자가 제어하는 머리글을 사용하는 것입니다.-I그리고 당신이 가지고 있지 않은 것들(시스템, 제3자 립스).-isystem실질적인 차이는 경고가 활성화되었을 때 발생합니다. 경고는 다음에서 발생합니다.-isystem헤더가 억제됩니다. -I에 대한 gcc 설명서에서: 헤더 파일을 검색할 디렉토리 목록의 머리에 디렉토리 dir를 추가합니다.이 디렉터리는 시스템 헤더 파일 디렉터리보다 먼저 검색되므로 시스템 헤더 파일을 재정의하여 사용자의 버전을 대체할 수 있습니다.그러나 공급업체에서 제공한 시스템 헤더 파일이 포함된 디렉터리를 추가하려면 이 옵션을 사..

sourcetip 2023.06.17

C에서 폐쇄를 달성할 수 있는 방법이 있습니까?

C에서 폐쇄를 달성할 수 있는 방법이 있습니까? 이 기능이 작동하기를 원하지만 작동하지 않습니다. #include typedef struct closure_s { void (*incrementer) (); void (*emitter) (); } closure; closure emit(int in) { void incrementer() { in++; } void emitter() { printf("%d\n", in); } return (closure) { incrementer, emitter }; } main() { closure test[] = { emit(10), emit(20) }; test[0] . incrementer(); test[1] . incrementer(); test[0] . emitte..

sourcetip 2023.06.12

C에서 "포장된" 구조는 무엇입니까?

C에서 "포장된" 구조는 무엇입니까? 나는 마이크로칩 C30 컴파일러용으로 작성된 C 코드를 살펴보고 있으며 종종 다음과 같이 정의된 구조를 봅니다. typedef struct __attribute__((__packed__)) { IP_ADDR MyIPAddr; // IP address IP_ADDR MyMask; // Subnet mask IP_ADDR MyGateway; // Default Gateway // etc... } APP_CONFIG; packed가 무슨 뜻입니까?구조가 정의되면 컴파일러는 패딩(실제 데이터가 없는 공간)을 추가할 수 있으므로 구성원이 CPU에 더 쉽게 액세스할 수 있는 주소 경계에 속합니다. 예를 들어 32비트 CPU에서 32비트 멤버는 효율적으로 액세스(읽기 및 쓰기)하..

sourcetip 2023.06.07
반응형