'array'에 해당되는 글 3건

  1. 2017.05.22 컬렉션 타입
  2. 2017.02.06 Swift - 함수, 콜렉션 타입
  3. 2012.05.11 C <14>. 배열 (4)

컬렉션 타입

  • Array - 순서가 있는 리스트 컬렉션 
  • Dictionary - `키`와 `값`의 쌍으로 이루어진 컬렉션 
  • Set - 순서가 없고, 멤버가 유일한 컬렉션 

소스코드



Array

Array는 멤버가 순서(인덱스)를 가진 리스트 형태의 컬렉션 타입입니다.


Array 선언 및 생성

Array는 여러 리터럴 문법을 활용할 수 있어서 표현 방법이 다양합니다

// 빈 Int Array 생성
var integers: Array = Array()

// 같은 표현
// var integers: Array = [Int]()
// var integers: Array = []
// var integers: [Int] = Array()
// var integers: [Int] = [Int]()
// var integers: [Int] = []
// var integers = [Int]()


Array 활용

integers.append(1)
integers.append(100)

// Int 타입이 아니므로 Array에 추가할 수 없습니다
//integers.append(101.1)

print(integers)	// [1, 100]

// 멤버 포함 여부 확인
print(integers.contains(100)) // true
print(integers.contains(99)) // false

// 멤버 교체
integers[0] = 99

// 멤버 삭제
integers.remove(at: 0)
integers.removeLast()
integers.removeAll()

// 멤버 수 확인
print(integers.count)

// 인덱스를 벗어나 접근하려면 익셉션 런타임 오류발생
//integers[0]


let을 사용하여 Array를 선언하면 불변 Array가 됩니다

let immutableArray = [1, 2, 3]

// 수정이 불가능한 Array이므로 멤버를 추가하거나 삭제할 수 없습니다
//immutableArray.append(4)
//immutableArray.removeAll()


Dictionary

Dictionary는 의 쌍으로 이루어진 컬렉션 타입입니다.


Dictionary의 선언과 생성

Dictionary는 여러 리터럴 문법을 활용할 수 있어서 표현 방법이 다양합니다

// Key가 String 타입이고 Value가 Any인 빈 Dictionary 생성
var anyDictionary: Dictionary = [String: Any]()

// 같은 표현
// var anyDictionary: Dictionary  = Dictionary()
// var anyDictionary: Dictionary  = [:]
// var anyDictionary: [String: Any] = Dictionary()
// var anyDictionary: [String: Any] = [String: Any]()
// var anyDictionary: [String: Any] = [:]
// var anyDictionary = [String: Any]()


Dictionary 활용

// 키에 해당하는 값 할당
anyDictionary["someKey"] = "value"
anyDictionary["anotherKey"] = 100

print(anyDictionary) // ["someKey": "value", "anotherKey": 100]

// 키에 해당하는 값 변경
anyDictionary["someKey"] = "dictionary"
print(anyDictionary) ["someKey": "dictionary", "anotherKey": 100]

// 키에 해당하는 값 제거
anyDictionary.removeValue(forKey: "anotherKey")
anyDictionary["someKey"] = nil
print(anyDictionary)

let을 사용하여 Dictionary를 선언하면 불변 Dictionary가 됩니다


let emptyDictionary: [String: String] = [:]
let initalizedDictionary: [String: String] = ["name": "yagom", "gender": "male"]

// 불변 Dictionary이므로 값 변경 불가
//emptyDictionary["key"] = "value"

키에 해당하는 값을 다른 변수나 상수에 할당하고자 할 때는 옵셔널과 타입 캐스팅 파트에서 다룹니다

// "name"이라는 키에 해당하는 값이 없을 수 있으므로 
// String 타입의 값이 나올 것이라는 보장이 없습니다.
// 컴파일 오류가 발생합니다
let someValue: String = initalizedDictionary["name"]


Set

Set는 순서가 없고, 멤버가 유일한 것을 보장하는 컬렉션 타입입니다.

Set의 선언과 생성

// 빈 Int Set 생성
var integerSet: Set = Set()
integerSet.insert(1)
integerSet.insert(100)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99)

print(integerSet) // [100, 99, 1]
print(integerSet.contains(1)) // true
print(integerSet.contains(2)) // false

integerSet.remove(100)
integerSet.removeFirst()

print(integerSet.count) // 1


Set는 집합연산에 많이 활용됩니다

// Set는 집합 연산에 꽤 유용합니다
let setA: Set = [1, 2, 3, 4, 5]
let setB: Set = [3, 4, 5, 6, 7]

// 합집합
let union: Set = setA.union(setB)
print(union) // [2, 4, 5, 6, 7, 3, 1]

// 합집합 오름차순 정렬
let sortedUnion: [Int] = union.sorted()
print(sortedUnion) // [1, 2, 3, 4, 5, 6, 7]

// 교집합
let intersection: Set = setA.intersection(setB)
print(intersection) // [5, 3, 4]

// 차집합
let subtracting: Set = setA.subtracting(setB)
print(subtracting) // [2, 1]


생각해보기

다음과 같은 경우에는 각각 어떤 컬렉션 타입을, 상수/변수 선언 중 어떤 것을 사용하면 유용할지 생각해 봅시다. 

  • 영어 알파벳 소문자를 모아두는 컬렉션
  • 책의 제목과 저자 정리를 위한 컬렉션
  • 우리반 학생 명부 작성을 위한 컬렉션








by yagom

facebook : http://www.facebook.com/yagomSoft

facebook group : https://www.facebook.com/groups/yagom/


p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓ 블로거에게 공감은 큰 힘이 됩니다 ↓↓↓ 

저작자 표시 비영리 변경 금지
신고

'Swift > 기본문법' 카테고리의 다른 글

조건문  (0) 2017.05.29
함수  (2) 2017.05.25
컬렉션 타입  (0) 2017.05.22
데이터 타입  (0) 2017.05.18
상수와 변수  (0) 2017.05.15
이름짓기, 콘솔로그, 문자열 보간법  (0) 2017.05.11
Posted by yagom


오늘의 주제

1. 함수

2. 콜렉션 타입 - 배열, 딕셔너리, 세트


안녕하세요, 야곰입니다. 


지난 포스팅에서는 변수와 상수 선언방법 그리고 기초적인 데이터 타입까지 알아봤습니다.


2017/01/23 - [Swift] - Swift란 어떤 언어인가?

2017/01/25 - [Swift] - Swift 기초문법 - 변수, 상수, 기초 데이터 타입


이번에는 스위프트의 함수와 함께 스위프트에서 제공하는 컬렉션 타입에 대해 알아보겠습니다 :)


함수

대부분 함수는 작업의 가장 작은 단위이자 하나의 작은 프로그램이기도 합니다. “하나의 프로 그램은 하나의 큰 함수다”라는 말이 있듯이, 함수는 프로그램을 이루는 주된 요소 중 하나입니다. 스위프트에서 함수는 일급 객체이기 때문에 하나의 값으로도 사용할 수 있습니다. 


스위프트에서 함수는 다른 언어보다 훨씬 다양한 모습으로 존재하며, 코딩 스타일도 여러 가지입니다. 따라서 개인이나 협업자끼리 코딩 규칙을 만들고 함수를 사용하기를 권합니다. 


함수와 메서드



함수의 정의와 호출 

스위프트의 함수는 재정의(오버라이드)와 중복 정의(오버로드)를 모두 지원합니다. 따라서 매개변수의 타입이 다르면 같은 이름의 함수를 여러 개 만들 수 있고, 매개변수의 개수가 달라도 같은이름의 함수를 만들 수 있습니다. 그렇기 때문에 예제 중간중간 이름이 같은 함수를 구현해도 오류가 발생하지 않습니다. 



기본적인 함수의 정의와 호출


스위프트의 함수는 자유도가 굉장히 높은 문법 중 하나입니다. 기본으로 함수의 이름과 매개변수(Parameter), 반환 타입(Return Type) 등을 사용하여 함수를 정의합니다. 

함수를 정의하는 키워드는 func입니다. 함수 이름을 지정해준 후 매개변수는 소괄호( ( ) )로 감싸줍니다. 반환 타입을 명시하기 전에 -> 를 사용하여 어떤 타입이 반환될 것인지 명시해줍니다. 반환을 위한 키워드는 다른 언어처럼 return입니다. 


함수의 기본 형태는 다음과 같습니다. 

func 함수이름(매개변수...) -> 반환타입 { 
    실행 구문 
    return 반환 값 
} 

간단한 함수를 구현해 봅니다. 함수 이름은 hello이며, name이라는 이름의 String 타입 매개변수를 가지며, String 타입의 값을 반환하는 함수입니다. 또, greeting이라는 문자열에 hello 함수의 반환 값을 저장하고 출력합니다.

func hello(name: String) -> String {
    return "Hello \(name)!"
}

let greeting: String = hello(name: "yagom")
print(greeting)   // Hello yagom!

매개변수가 없는 함수

함수에 매개변수가 필요 없다면 매개변수 위치를 공란으로 비워둡니다. 

func helloWorld() -> String { return "Hello, world!" } print(helloWorld()) // Hello, world!


매개변수가 여러 개인 함수 

매개변수가 여러 개 필요한 함수를 정의할 때는 쉼표(,)로 매개변수를 구분합니다. 주의할 점은 함수를 호출할 때, 매개변수 이름을 붙여주고 콜론(:)을 적어준 후 전달인자를 보내준다는 점입니다. 

func sayHello(myName: String, yourName: String) -> String {
    return "Hello \(yourName)! I'm \(myName)"
}

print(sayHello(myName: "yagom", yourName: "eric"))
// Hello eric! I'm yagom

컬렉션 타입

스위프트는 많은 수의 데이터를 묶어서 저장하고 관리할 수 있는 컬렉션 타입을 제공합니다. 컬렉션 타입에는 배열(Array), 딕셔너리(Dictionary), 세트(Set) 등이 있습니다. 이번 포스팅에서는 배열과 딕셔너리에 대해 알아봅니다.

배열


배열은 같은 타입의 데이터를 일렬로 순서대로 저장하는 형태의 컬렉션 타입입니다. 각기 다른 위치에 같은 값이 들어갈 수도 있음을 알아두세요. let 키워드를 사용하여 상수로 선언하면 변경할 수 없는 배열이 되고, var 키워드를 사용하여 변수로 선언해주면 변경 가능한 배열이 됩니다. 실제로 배열을 사용할 때는 Array라는 키워드와 타입 이름의 조합으로 사용합니다. 또, 대괄호로 값을 묶어 Array 타입임을 표현할 수도 있습니다. 이처럼 배열 타입을 선언해줄 수 있는 방법은 다양합니다. 빈 배열은 이니셜라이저 또는 리터럴 문법을 통해 생성해줄 수 있는 데 isEmpty 프로퍼티를 통해 비어있는 배열인지 확인해볼 수 있습니다. 그리고 배열에 몇 개 의 요소가 존재하는지 알고 싶으면 count 프로퍼티를 확인하면 됩니다. 

스위프트의 Array



var names: Array = ["yagom", "chulsoo", "younghee", "yagom"]
// 대괄호를 사용하여 배열임을 표현합니다. 

var names: [String] = ["yagom", "chulsoo", "younghee", "yagom"]
// 위의 선언과 정확히 동일한 표현으로, [String]은 Array의 축약 표현입니다.

var emptyArray: [String] = [String]() 
// String 데이터를 요소로 갖는 빈 배열을 생성합니다. 

var emptyArray: [String] = Array() 
// 위의 선언과 정확히 같은 동작을 하는 코드입니다. 

var emptyArray: [String] = []
// 배열의 타입을 정확히 명시해줬다면 []만으로도 빈 배열을 생성할 수 있습니다.

print(emptyArray.isEmpty)   // true
print(names.count)          // 4 

배열은 각 요소에 인덱스를 통해 접근할 수 있습니다. 인덱스는 0부터 시작합니다. 잘못된 인덱스로 접근하려고 하면 오류가 발생합니다. 

맨 처음과 맨 마지막 요소는 firstlast 프로퍼티를 통해 가져올 수 있습니다. 
index(of:) 메서드를 사용하면 해당 요소의 인덱스를 알아낼 수도 있습니다. 만약, 중복된 요소가 있다면 제일 먼저 발견된 요소의 인덱스를 반환합니다. 
맨 뒤에 요소를 추가하고 싶다면 append(_:) 메서드를 사용합니다. 
중간에 요소를 삽입하고 싶다면 insert(_:at:) 메서드를 사용하면 됩니다. 
요소를 삭제하고 싶다면 remove(_:) 메서드를 사용하게 되는데, 메서드를 사용하면 해당 요소가 삭제된 후 반환됩니다.

print(names[2])     // younghee

names[2] = "jenny"

print(names[2])     // jenny
print(names[4])     // 인덱스의 범위를 벗어났기 때문에 오류가 발생합니다.

names[4] = "elsa"   // 인덱스의 범위를 벗어났기 때문에 오류가 발생합니다.
names.append("elsa")    // 마지막에 elsa가 추가됩니다.

names.append(contentsOf: ["john", "max"]) // 맨 마지막에 john과 max가 추가됩니다. 
names.insert("happy", at: 2) // 인덱스 2에 삽입됩니다. 
names.insert(contentsOf: ["jinhee", "minsoo"], at: 5)
// 인덱스 5의 위치에 jinhee와 minsoo가 삽입됩니다. 

print(names[4]) // yagom
print(names.index(of: "yagom"))     // 0
print(names.index(of: "christal"))  // nil
print(names.first)      // yagom
print(names.last)       // max

let firstItem: String = names.removeFirst()
let lastItem: String = names.removeLast()
let indexZeroItem: String = names.remove(at: 0)

print(firstItem)        // yagom
print(lastItem)         // max
print(indexZeroItem)    // chulsoo
print(names[1 ... 3])   // ["jenny", "yagom", "jinhee"]

  • 중간중간 몇몇 print 함수를 실행하려고 하면 경고를 띄워주는 이유는 해당 메서드의 반환값이 옵셔널이기 때문입니다. 옵셔널에 대해서는 다음 포스팅에서 다룹니다.
  • nil은 ‘없음’을 의미하는 표현입니다.

위의 코드 맨 아래 줄의 names[1 ... 3] 표현은 범위 연산자를 사용하여 names 배열의 일부만 가져온 것입니다. 코드처럼 읽기만 가능한 것이 아니라 names[1 ... 3] = ["A", "B", "C"]와 같이 범위에 맞게 요소를 바꾸는 것도 가능합니다. 스위프트의 배열을 비롯한 컬렉션 타입을 활용할 때 서브스크립트(Subscript) 기능을 많이 사용합니다. 


딕셔너리

딕셔너리는 요소들이 순서 없이 키와 값의 쌍으로 구성되는 컬렉션 타입입니다. 
딕셔너리에 저장되는값은 항상 키와 쌍을 이루게 되는데, 딕셔너리 안에는 키가 하나이거나 여러 개일 수 있습니다. 단, 하나의 딕셔너리 안의 키는 그 안에서는 유일해야 합니다. 쉽게 말해서 아래의 코드에서 “yagom”이라는 키가 두 번 쓰일 수 없다는 뜻입니다. 즉, 딕셔너리에서 키는 값을 대변 하는 유일한 식별자가 되는 것입니다.

let 키워드를 사용하여 상수로 선언하면 변경 불가능한 딕셔너리가 되고, var 키워드를 사용하여 변수로 선언해주면 변경 가능한 딕셔너리가 됩니다. 

딕셔너리는 Dictionary라는 키워드와 키의 타입과 값의 타입 이름의 조합으로 써줍니다. 대괄호로 키와 값의 타입 이름의 쌍을 묶어 딕셔너리 타입임을 표현합니다. 
빈 딕셔너리는 이니셜라이저 또는 리터럴 문법을 통해 생성할 수 있습니다. 
isEmpty 프로퍼티를 통해 비어있는 딕셔너리인지 확인할 수 있습니다. 그리고 count 프로퍼티로 딕셔너리의 요소 개수를 확인할 수 있습니다.

// 키는 String, 값은 Int 타입인 빈 딕셔너리를 생성합니다.
var numberForName: Dictionary = Dictionary()

// 위의 선언과 정확히 동일한 표현입니다.
var numberForName: [String: Int] = [String: Int]()
// [String: Int]는 Dictionary의 축약 표현입니다.

// 딕셔너리의 키와 값 타입을 정확히 명시해줬다면 [:]만으로도 빈 딕셔너리를 생성할 수 있습니다. 
var numberForName: [String: Int] = [:]

var numberForName: [String:Int] = ["yagom":100, "chulsoo":200, "jenny":300]
// 초깃값을 주어 생성해줄 수도 있습니다.

print(numberForName.isEmpty) // false 
print(numberForName.count) // 3

딕셔너리는 각 값에 키를 통해 접근할 수 있습니다. 딕셔너리 내부에서 키는 유일해야 하며, 값은 유일하지 않습니다. 딕셔너리는 배열과는 다르게 딕셔너리 내부에 없는 키로 접근해도 오류가 발생하지 않습니다. 다만 nil을 반환할 뿐이죠. 

특정 키에 해당하는 값을 제거하려면 removeValue(forKey:) 메서드를 사용하면 됩니다. 키에 해당하는 값이 제거된 후 반환됩니다.

print(numberForName["chulsoo"]) // 200
print(numberForName["minji"])   // nil

numberForName["chulsoo"] = 150
print(numberForName["chulsoo"]) // 150

numberForName["max"] = 999      // max라는 키로 999라는 값을 추가해줍니다.
print(numberForName["max"])     // 999

print(numberForName.removeValue(forKey: "yagom"))   // 100
print(numberForName.removeValue(forKey: "yagom"))   // nil
// 위에서 yagom 키에 해당하는 값이 이미 삭제되었으므로 nil이 반환됩니다.


이번에 스위프트의 기초적인 형태의 함수와 컬렉션 데이터 타입에 대해 알아봤습니다. 다음 포스팅에서는 구조체와 클래스에 대해 알아보겠습니다. 

다음 번에 또 뵈어요~ 고맙습니다 :D





by yagom

facebook : http://www.facebook.com/yagomSoft

facebook group : https://www.facebook.com/groups/yagom/

twitter : http://www.twitter.com/yagomSoft ( @yagomsoft )

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   




저작자 표시 비영리 변경 금지
신고

'Swift > 기본문법' 카테고리의 다른 글

스위프트 시작하기  (0) 2017.05.08
Swift - 프로토콜, 익스텐션  (0) 2017.03.07
Swift - 구조체 클래스  (0) 2017.02.28
Swift - 함수, 콜렉션 타입  (0) 2017.02.06
Swift 기초문법 - 변수, 상수, 기초 데이터 타입  (0) 2017.01.25
Swift란 어떤 언어인가?  (0) 2017.01.23
Posted by yagom

C <14>. 배열

C 2012.05.11 12:30

오늘의 주제

1. 배열 


열 네번째 시간입니다.^^

지난 번에는 변수의 범위에 대하여 알아보았습니다.
감이 조금 오실지는 잘 모르겠습니다^^;
혹여나 부족한 부분이 있다면 말씀해 주세요 ㅎ
이번에는 또 하나 중요한 개념인 배열에 대하여 알아보도록 하겠습니다.

출발!!!!

자, 시작전에 추천 한 방 어떠세요?ㅎ



# 배열이란?

자, 배열이란 무엇일까요?

配列
 
나눌 배, 벌일 열.

사전에는
"동일한 성격의 데이터를 관리하기 쉽도록 하나로 묶는 ."
이라고 정의되어 있네요 ㅎ

자, 쉽게 한 번 알아봅시다.



위에는 제가 발로그린 배열의 개념도 입니다.

위의 정의에서 보듯이 배열은 같은 종류의 데이터를 줄세워 놓은 녀석을 말합니다.

그림에서 보듯이 배열은 같은 크기의 상자들이 쭈욱 붙어서 늘어서 있습니다. 
 
배열의 선언방법은

자료형 배열이름[배열크기];

입니다.

초기화 방법은 여러가지가 있습니다만 

5개의 배열에 하나씩 넣어주려면 위의 그림처럼 초기화 해 줄 수 있구요,

int arr[100] = { 0, };

으로 초기화하면 모든 원소의 값이 0으로 초기화 됩니다.

배열의 index는 0부터 시작합니다.

위의 그림에도 보듯이 5칸 배열을 선언을 해 주었는데

index는 0부터 시작을 하므로 index값이 0으로 시작하여 4로 끝나게 되지요.

위의 그림에서 

rgIntArray[0]에는 1이, rgIntArray[1]에는 3이... 이런식으로 들어가 있을 겁니다.

그래서 맨 첫칸의 자료를 변경하거나 읽어오려면 rgIntArray[0] 라고 하면 변수처럼 사용이 가능한 것입니다.

개념이 조금 잡히시나요?

배열은 단지 같은 유형의 데이터를 쭈욱 늘어놓은 것이라고 생각하시면 되겠습니다.^^


# 배열과 포인터
 

여기서 배열의 비밀을 하나 말씀드리려 합니다.

배열을 사용하게되면 같은 유형의 자료들을 모아놓고 쓸 수 있는 편한점이 있지만 이 외에도 좋은 점이 있습니다.

배열 자체를 포인터로 접근이 가능하다는 점입니다.

포인터에 대해서 잘 모르시겠다구요?

지난 포스팅을 참고해 주세요...^^

2012/03/23 - [C] - C <10>. 포인터 (1)개념잡기
2012/03/27 - [C] - C <11>. 포인터 (2)간단실습

'배열을 포인터로 사용이 가능하다고???'

무슨 말일까요?



자. 배열에서 각각의 자료를 불러오거나 저장할 때

배열명[index]로 변수처럼 사용한다고 말씀드렸죠?

그런데 만약에 함수(2012/04/02 - [C] - C <12>. 함수)를 사용할 때, 인자로 배열을 넘겨야 할 때...

이녀석들을 하나하나 다 넘길 수가 없겠죠?

그래서 인자를 넘길때는 해당 자료형의 포인터값으로 넘어가게 됩니다.

그래서 함수 안에서 이 배열 통채를 사용 할 수 있게 됩니다.

배열의 원소들은 메모리 안에서 위에 그림처럼 다닥다닥 붙어있게 됩니다.

그렇기 때문에 배열의 첫머리의 주소만 알면 그 다음녀석, 그 다다음 녀석도 메모리상의 어느 위치에 있는지 쉽게 알 수 있게되는거죠.

이해가 되시려나요? +_+

그래서 그림처럼 rgIntArray 라고 변수처럼 사용하면 이녀석은 배열의 첫 번째 원소를 가리키는 포인터값입니다.

그녀석에 +1을 해주면 그 다음칸 녀석의 주소를 가리키게 되는 것입니다. 그런식으로 rgIntArray+2면 rgIntArray의 주소값이 겠죠?

이해가 안되면 실습으로 궁금증을 풀어봅시다..ㅎㅎ

# 실습해보기 

자세한 코드 설명은 주석에 달려있으므로 참고하시기 바랍니다~!
yagom.h 파일에는

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

만 작성되어 있습니다.



자, 실행 결과입니다.
자신의 실행결과와 일치하나요?ㅎ


여기까지 배열에 관하여 간단히 알아보았습니다.

문자 배열 ( char[] )는 문자열로 사용이 가능합니다.

printf와 같은 함수에서 %s로 문자열 출력이 가능하지요.

대신 문자열의 맨 마지막은 null (\0)으로 끝나야 합니다.

2차원, 다차원 배열도 있지만 그것도 어렵게 생각하실 필요가 없습니다.

쉽게 쉽게 생각해 보세요~

따로 포스팅할 필요를 잘 못느껴서 하진 않지만,

누군가 요청해 주시면 다차원 배열에 대해서도 한 번 알아보도록 하겠습니다~^^&


자, 그럼 여기서 생길만한 의문점..!!

Q : 배열을 생성해 놓고 배열의 크기나 종류를 변경 할 수는 없나요?
A : 네, 불가능 합니다. 그렇기 때문에 동적할당이라는 녀석을 사용하게 되는데, 추후에 포스팅 할 예정입니다.

다른 의문점이 또 있다면 댓글 주세요..^^

또 필요한 것이 있다면 말씀해 주세요 ㅎ

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



저작자 표시 비영리 변경 금지
신고

'C' 카테고리의 다른 글

C <16>. 구조체  (2) 2012.05.16
C <15>. 전처리자  (0) 2012.05.14
C <14>. 배열  (4) 2012.05.11
C <13>. 변수의 범위  (0) 2012.04.05
C <12>. 함수  (4) 2012.04.02
C <11>. 포인터 (2)간단실습  (0) 2012.03.27
Posted by yagom


티스토리 툴바