COSMOSRKSI
방명록 RSS 태그 글쓰기 관리자
 
c언어 프로그램 실행 시간 측정 방법
Program language/C 2021-05-19 13:09:44

// 헤더선언

#include <time.h>

 

// 메인함수에서 변수 선언

clock_t finish, start;
double duration; 

 

// 시작

start = clock();

 

// 종료

finish = clock();

 

// 실행 시간 출력

duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf("걸린 시간 : %lf", duration);

 



C6011 경고 해결방법
Program language/C 2021-05-19 11:50:07

treeNode* makeRootNode(char data, treeNode* leftNode, treeNode* rightNode, int isThreadRight) {
treeNode *root = (treeNode*)malloc(sizeof(treeNode));
if (root != NULL) {
root->data = data;
root->left = leftNode;
root->right = rightNode;
root->isTreadRight = isThreadRight;
}
else
free(root);
return root;
}



[C] Max(a,b) ((a>b) ? a:b)
Program language/C 2021-04-13 10:54:09

#define Max(a,b) ((a>b) ? a:b)

 

 



[C] 노트필기
Program language/C 2021-04-12 10:58:57

함수 선언시 int func_name(int a, int b) 대신 int func_name(int , int) 가능

 

//

 

연산 후 둘 중 하나 반환할 때

 

int large_number(int a, int b)

{

if(a > b)

return a;

else

return b;

}

 

//

 

지역 내에서는 지역 변수가 전역 변수보다 우선시된다.

 

//

 

static 사용법

 

void fct(void) // static int val = 0; <- 중요함

{

int val = 0;

val++;

printf("%d",val)

}

 

//

 

포인터란 메모리의 주소 값을 저장하기 위한 변수이다.

포인터가 변수라는 것을 강조하기 위해 '포인터 변수'라는 표현을 쓴다.

'포인터 변수'의 크기는 4바이트이다.

포인터가 가리키고자 하는 변수의 자료형에 따라서 적절한 타입의 포인터를 선언해야 한다.

 

(*pA)++; // a++와 같은 의미이다.

 

포인터에 타입이 존재하는 이유는 포인터를 이용해서 변수를 참조하는 경우 몇 바이트를 읽어 들여야 할 지 알 수 없게 된다. 포인터의 타입은 메모리를 참조하는 방법을 알려주는 역할을 한다.

 

포인터는 변수이고(포인팅하는 곳을 바꿀 수 있음), 배열의 이름은 상수(프로그램이 종료될 때까지 선언한 배열의 첫 번째 요소만 가리킨다.)이다.

 

//

 

포인터에 배열 주소 대입할 때

 

int arr[3] = {1,2,3};

int *ptr;

 

ptr = arr; // 중요한 부분

 

printf("%d %d %d", ptr[0], ptr[1], ptr[2]);

 

//

 

포인터 연산

ptr++; // 선연산 후증가 따라서 이 상태로 printf 찍으면 처음 그 값 나오고 다음에 다시 printf 찍으면 연산된 값 나옴, 이건 다음 번지로 넘어감 (int형 4자리, char형 1자리, double형 8자리)

ptr +=3;

--ptr;

ptr2=ptr1+2;

단 곱셈, 나누기는 안됨

 

blog.naver.com/liberty914/220283990162

 

C언어 Chapter 12-3. 포인터변수와 괄호의 사용, 그들의 차이점

안녕하세요? Rex 입니다 ^_^/ 포인터변수를 쭉 보다보니, 괄호에 대한 궁금증이 생기더라구요,괄호를 사용...

blog.naver.com

ex)

num = 10;

int *ptr1 = &num;

(*ptr1)++ // 값에다가++

*ptr1++ // 주소에다가 ++

//

 

*(++pArr) // 포인터가 가리키는 곳이 완전 이동함 (주차됨)

 
 
 

*(pArr+1) // 포인터가 주차된 곳에서 포인터 자료형에 따라서 +1된 메모리 주소의 값을 읽음

 

//

 

열혈강의c p330

 

int arradder(int *pArr, int n)

{

 

}

 

=====

int arr[10] = {~~~~~~~};

int sumofadder;

 

sumofadder=arradder(arr, sizeof(arr) / sizeof(int))

 

//

 

int pArr[]과 int *pArr은 같다.

 

//

 

열혈강의c p406

 

void show_data(int (*ptr)[4], int row_data) // intptr[][4]도 가능, 단 함수의 매개변수로 선언시에만 가능

{

int i, j;

 

for(i = 0; i < row_data; i++)

{

for(j = 0; j < 4; j++)

{

printf("%d ", ptr[i][j]);

printf("\n");

}

}

 

 

int arr1[2][4] = {1,2,3,4,5,6,7,8};

int arr2[3][4] = {{1},{2},{3}};

 

show_data(arr1,2);

show_data(arr2,3);

 
 
 

 

//

 

열혈강의c p408 int ptra[4] ,int (*ptra)[4]의 차이 / p319 배열 요소를 포인터를 지니는 포인터 배열

키워드: 포인터배열, 배열포인터

 

arr[i] == *(arr+i) // 인덱스 접근방법, 2차원에서는 주소로 접근?

 

//

 

구조체 배열 선언

 

struct person{

char name[20];

char phone[20];

int age;

};

 

=====

 

struct person pArray[10]; // 구조체 배열 선언

 

pArray[0].age = 10; strcpy(pArray[1].name, "smith") // 각 구조체 배열로 접근

 

ex)

 

for (int i = 0; i < 3; i++)

{

scanf("%s %s", pArray[i].name, pArray[i].phone);

}

 

//

 

구조체 선언과 동시에 초기화

=====

struct person pArray[3] = {

{aa,bb,cc},

{123,123,123},

{567,567,567}

};

 

//

 

구조체 생성

구조체 배열 생성

구조체 포인터 생성

구조체 포인터로 맴버 접근 후 print

구조체 포인터로 맴버 접근 후 값 변경 후에 print

 

#include <stdio.h>

struct _person {
char name[20];
int age;
};

void main()
{
struct _person person[3] = {
{"abc",1},
{"def",2},
{"ghi",3}
};

struct _person* P_person;

P_person = &person;

for (int i = 0; i < 3; i++)
{
printf("%s\n", P_person[i].name);
}

P_person[0].age = 5;

printf("%d", P_person[0].age);
}

 

//

 

 

구조체 변수의 주소 값과 구조체 변수의 첫 번째 멤버의 주소 값은 같다.

 

//

 

구조체 선언 후 함수로 구조체 넘기기 (value, reference)1

 

#include <stdio.h>

struct simple {
int data1;
int data2;
};

void show(struct simple ts)
{
printf("%d %d\n", ts.data1, ts.data2);
}

void swap(struct simple *ps)
{
int temp;

temp = ps->data1;
ps->data1 = ps->data2;
ps->data2 = temp;
}
void main()
{
struct simple s = { 1,2 };

show(s);
swap(&s);
show(s);
}

 

구조체 선언 후 함수로 구조체 넘기기 (value, reference)2 (포인터 변수 선언)

 

#include <stdio.h>

struct simple {
int data1;
int data2;
};

void show(struct simple ts)
{
printf("%d %d\n", ts.data1, ts.data2);
}

void swap(struct simple *ps)
{
int temp;

temp = ps->data1;
ps->data1 = ps->data2;
ps->data2 = temp;
}
void main()
{
struct simple s = { 1,2 };
struct simple* ps;
ps = &s;
show(s);
swap(ps);
show(s);
}

 

 

//

동적 메모리 할당

 

#include <stdio.h>
#include <stdlib.h>

void function(int i)
{
int* array = (int*)malloc(sizeof(int) * i);
int j;
if (array == NULL)
puts("fail");

for (j = 0; j < i; j++)
{
array[j] = j + 1;
}
for (j = 0; j < i; j++)
{
printf("%d ", array[j]);
}
printf("\n");
}

void main()
{
int m = 0;

fputs("배열의 크기를 입력하세요: ", stdout);
scanf_s("%d", &m);
function(m);

}




이 사이트에는
넥슨코리아에서 제공한 넥슨 Lv.1 고딕 Regular체,
카페24가 제작한 아네모네체,
Cadson Demak가 디자인한 Kanit체,
Sandoll이 디자인한 나눔고딕체가
적용되어 있습니다.
멋진 폰트를 무료로 제공해주셔서 감사합니다.

Copyleft ⓒ bskyvision (블루스킨 v1.2)