0429 내것

민우이·2022년 4월 29일

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//#include <string.h>
// strlen() : 문자열의 길이를 구하는 함수
//배열을 받으려면 포인터를 사용해야한다.
//배열을 매개변수로 받는 함수는 배열의 크기를 같이 받는다.
//문자열의 끝은 널 문자(Null CHaracter => 따라서 배열의 크기를 알지 않아도 끝을 알 수 있다.)
//매개변수 1개 => 문자열을 저장하기 위한 객체 => pointer to char
int strlen(const char str)
{
/
arr : pointer to int
어떻게 문자열의 길이를 구할 수 있을까?
1. str은 문자열이다.
2. 문자열의 끝은 널 문자다. */

}
///strchr() : 문자열에서 특정 문자의 위치를 찾는 것
// 1. 문자가 있는 경우=> 그 문자의 위치
// 2. 문자가 없는 경우=> NULL
/
// char* pos = strchr("Hello, 'l");

//char str = "asdasdasdasd"; => a =131313113213113 s=2465465131313 d= 341363132132
//char ch = 'd';
char
strchr(const char* str , const char ch) {

while (*str != '\0') {

	if (*str == ch)
	{
		return str;
	}
	++str;

}

return NULL;

}

int main(void)
{
int arr[10];
sizeof arr;

char asd[123] = "asdasdasdasd";
printf("%p", strchr(asd, 'd'));

printf("%c", toupper('A'));
return 0;

}

int toupper(char num) {
if ('a'<= num && num >= 'z') {
num = num - 32;
}
else {
num;
}
return num;
}
;//void Swap(int a, int b)
//{
// // a : 0x1234 -> 0xabcd
// b : 0x5678 -> 0x5780
// int temp = a;
//
a = b;
//
b = temp;
//}
//int main()
//{
// int a = 10, b = 20;
// Swap(&a, &b);
// printf("%d %d", a, b);
// return 0;
//
// int islower(char ch)
// {
// if ('a' <= ch && ch <= 'Z')
// {
// return 1;
// }
// else
// {
// return 0;
// }
// }
//// isupper()
// int isupper(char ch)
// {
// if ('A' <= ch && ch <= 'z')
// {
// return 1;
// }
// else
// {
// return 0;
// }
// }
//
// char tolower(char ch)
// {
// if ('A' <= ch && ch <= 'Z')
// {
// return ch + 32;
// }
// else
// {
// return ch;
// }
// }
//
// //
// char toupper(char ch123)
// {
//
// if ('a' <= ch123 && ch123 <= 'z')
// {
// return ch - 32;
// }
// else
// {
// return ch;
// }
// }

// tolower(대문자에서 소문자로) / toupper(소문자에서 대문자로)


//islower() : 한개의 문자를 받아 소문자인지 판별한다.
// 
//char word[128] = "Hello, String!";
//	//Hello,String => Drnken Jaesung
//strcpy(word, "Drunken Jaesung");
//char word3;
//strcpy(word2, word3);
//puts(word)

/*long long sum(int* a, int n)
{
	long long result = 0LL;
	for (int i = 0; i < n; ++i)
	{
		result += a[i];
	}
	return result;
}*/

//swap() : 2개의 정수를 받아 서로 데이터를 교환

/// <summary>
	/*배열에 모든 원소를 더한다.
	</summary>
	<param name>
*/

/*
포인터는 다른 타입의 객체를 참조할 수 있는 타입이다.
Pointer : 데이터를 메모리 주소값으로 해석
Type* Identifier;
int num = 10; 
int* P = &num;
int* P2 = NULL;
p를 통해서 null에 접근
pointer dereference 
*p = 20; 
왜? 포인터를 사용해야 하는가? 다른 범위에 있는 메모리에 접근하기 위해
int* p => pointer to int 
int** p3; //pointer to pointer to int
int *** p4 = &p3; // pointer to pointer to pointer to int

메모리에 접근하는 방법은 2가지가 있다.
1. 직접 참조(Direct Regerence/ Direct Access) : 메모리 주소에 직접 접근하는 것
간접 참조(indirect Reference/ Indirect Access) : 메모리 주소를 포인터를 통해서 접근하는 것
Scope : 프로그램이 식별자를 찾을 수 있는 영역
Block scope => 지역변수 local variable

File Scope : 파일 내에서 접근  => 전역변수 Global Variable
Pointer Type 크기는 얼마인가?
Pointer Type :데이터를 메모리 주소값으로 해석한다.
x84 :4byte
x64 : 8byte
//+ - : 메모리 주소를 가리키고 있는 타입의 크기만큼 옮긴다.
//++ / --
// Address Operation : 주소 연산
char *pch  // pointer to character
pch +1; // 1 바이트만큼 뒤로
pch -1; // 1 바이트만큼 앞으로

a[b] => *(a+b);
*p++;
*++p;

//주의 : 역참조 연산자와 증감 연산자를 결합할 때 연산 순서를 유의해야 한다.

void* p; // pointer to void (int, double.\, function, ~~)
//Dereference : 
매개변수(parameter)
함수에서 사용되는 변수. 함수 외부에서 입력값을 받기 위해 사용.
함수를 사용한다는 것은 코드를 재사용하기 위함이다.
함수를 호출한다. 호출한 사람을 호출자(caller), 호출된 함수를 피호출자(calle)
// 호출자에게 내가 계산한 결과를 '반환'해줄 수 있다.
반환은 return문을 사용함. 반환 값은 반환 타입과 일치해야 함.
반환해줄 것이 없다면 void 타입을 사용.
// () : Call Operater
//3개의 입력을 받아 모든 입력값을 더해서 반환하는 함수 sum3()을 만들어라.
int sum3(int x,int y,int z)
 {
 return x+y+z;
 }
	
 long long sum(int* a, int n)
int a = sum(); //인자 (Argument) : 매개변수의 초깃값
*/

//입력 : 단어를 입력받는다.
//처리 : 알파벳 위치를 찾는다.
//
// 입력 : 반복 횟수와 문자열을 입력받는다.

/
그룹 단어 인지
/

// 입력 :
//처리 : 점수 계산
// 1. 0일 때 점수가 늘어감
// 2. 그 문제까지 연속된 0의 개수만큼 점수가 늘어남.

// 1. 현재 문제를 맞췄는가?
// 1-1, 맞았다면 연속적으로 맞춘만큼 점수를 부여한다.
//2. 1번으로 돌아가 문자열의 끝을 만날 때까지 반복한다.
//1. 현재 문제를 맞췄는가?


//Emty String
//pointer Type : 메모리 주소값으로 해석하는 타입
// 배열은 포인터 타입으로 암시적 변환 가능-> 포인터로 퇴행(decay) 했다.
//Buffer Overrun

0개의 댓글