2015. 2. 25. 18:57

파이썬은 신비하고도 아름다운 언어이다.

얼마전에 파이썬의 엄청난 예제를 보았는데 그 예제를 보고 난 더욱더 파이썬의 아름다움에 감탄을 금지 않을 수 없었다.


☆ for문에도 else가 있다.

# 소수값을 출력하는 예제

 #!/bin/py

for n in range(2, 10):  # 첫번째 for문

    for x in range(2, n):  #두번째 for문

        if n % x == 0:

            print n, 'equals', x, '*', n/x

            break

    else: #이 else문은 두번째 for문에 대한 else로 if에 대한 else 가 아니다.

        print n, 'is a prime number'

결과

$ python prime.py

2 is a prime number

3 is a prime number

4 equals 2 * 2

5 is a prime number

6 equals 2 * 3

7 is a prime number

8 equals 2 * 4

9 equals 3 * 3



for문이 break를 만나지 않는다면 for문을 다 거치고 무조건 else
break를 만난다면 for문을 완전히 빠져나와서 else를 안거친다!




Posted by Triany
2015. 2. 17. 11:39


■ ( const char * ) 상수형 문자에 대한 포인터. 포인터가 가리키는 변수의 을 바꿀 수 없음

#include <iostream>

int main()

{

    char ch1 = 'a';

    char ch2 = 'b';

    const char * pch;

    pch = &ch1;

    std::cout << *pch << std::endl;

    //*pch = 'c';  //에러  error: assignment of read-only location ‘* pch’

    pch = &ch2;

    std::cout << *pch << std::endl;


    return 0;

}

$ constchar

a

b



■ ( char const  * ) 문자에 대한 상수형 포인터. 포인터 값을 바꿀 수 없음

#include <iostream>

int main()
{
    char ch1 = 'a';
    char ch2 = 'b';
    char * const pch = &ch1;
    std::cout << *pch << std::endl;
    *pch = 'c';
    std::cout << *pch << std::endl;
    //pch = &ch2;   //에러 error: assignment of read-only variable ‘pch’
    std::cout << *pch << std::endl;

    return 0;
}

$charconst

a

c



■ ( const char const  * ) 상수형 문자에 대한 상수형 포인터. 

  포인터가 가리키는 변수의 과 포인터 값 을 바꿀 수 없음


#include <iostream>

int main()
{
    char ch1 = 'a';
    char ch2 = 'b';
    const char * const pch = &ch1;
    std::cout << *pch << std::endl;
   //*pch = 'c'; //error: assignment of read-only location ‘*(const char*)pch’ !! 문자값 못바꿈 
    std::cout << *pch << std::endl;
    //pch = &ch2; // error: assignment of read-only variable ‘pch’ 포인터 값 못바꿈!
    std::cout << *pch << std::endl;

    return 0;
}


$charconst

a






여기서 새로 발견한것! 당연한거지만!

char * const pch = 'c';

 error: invalid conversion from ‘char’ to ‘char*’ [-fpermissive]

 문자열이 아닌 'c' 문자 하나만 써주면! 에러가 뜬다.



문자열로 선언해주면, warning이뜬다. 

char * const pch = "c";


 warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

 char * const pch = "c";



Posted by Triany
2015. 2. 13. 18:33

기존에 우리는 배열을 선언할때

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

이렇게 선언이 가능했다.


그럼, class도 literal하게 선언이 가능할까?


해당사항은 c++98 컴파일러에서는 불가능 했는데,

c++11부터!  literal class로 선언 가능해 졌다.



#include <iostream>

class A
{
    public:
    int a;
    char b;
};


int main()
{
    A a = A{ 1, 'a'};
    std::cout << "a: " << a.a << "\tb: " << a.b << std::endl;
    return 0;

 



$ c++ -std=c+*98 main.cpp
main.cpp: In function ‘int main()’:
main.cpp:13:9: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
  A a = A{ 1, 'a'};
         ^ 

 

  c++98 컴파일러로 컴파일 하니 c++11 컴파일러로 하라고 친절하게 설명해 주었다. ㅋ

 extended initializer lists only available with -std=c++11 or -std=gnu++11

 

  

$ c++ -std=c++11 main.cpp
$ a.out
a: 1    b: a 


Posted by Triany