C++ Primer 5판 2.3.2 섹션 연습

2280 단어 C++Primer 학습
연습 2.18: 코드를 작성하여 포인터의 값과 포인터가 가리키는 대상의 값을 각각 변경한다.
프로그램 연습
 
연습 2.19: 지침과 인용의 주요 차이를 설명한다.
답:사실 P49쪽은 잘했어요.
바늘 인용은 다른 대상에 대한 간접적인 접근을 제공할 수 있습니다.지침 자체는 하나의 대상이고 인용 자체는 하나의 대상이 아니다.인용이 일단 귀속되면 그 귀속치가 생공사할 수밖에 없고 특히 한결같다.이 인용을 사용할 때마다 처음 연결된 대상에 접근합니다.
지침과 그것이 저장된 주소 사이에는 이런 제한이 없다.다른 변수와 마찬가지로, 바늘에 값을 부여하는 것은 새 주소를 저장해서 새로운 대상을 가리키는 것이다.
특히 int*p = & i 주의;std::cout<*p 
연습2.20: 다음 코드의 작용을 서술해 주세요.
     int i = 42;
         int*p1 = &i;
         *p1= *p1 * *p1;
답: 무섭게 보이지만 실제로는 잘 이해된다. *p1은 간접 방문 i이고, p1에 저장된 것은 i의 주소이기 때문에 실제로는 바늘p1을 통해 i의 값을 간접적으로 수정했다. i의 값이 42로 바뀌었다.×42, 검증 절차는 연습 2.20.cpp
 
연습 2.21: 다음 정의를 설명해 주세요.이 정의들 중에 불법이 있습니까?하면, 만약, 만약...
 intj = 0;
(a)double *dp = &j;            (b)int *ip = j;                         (c)int *p = &j;
답: (a) 불법, 전후 유형 불일치
(b) 불법, 포인터 저장은 대상 자체가 아닌 대상의 주소이다
(c) 적법
 
연습 2.22: p가 int형 지침이라고 가정하면 다음 코드의 의미를 설명하십시오
If(p)//..//만약 p가 저장한 주소가 비어 있지 않다면, 즉 p가 저장한 주소가 존재하고, 조건은 진실이며, 아래로 실행된다
If(*p)//...//만약 p가 가리키는 int형 대상의 값이 0과 같지 않으면 조건이 진짜이고 아래로 실행됩니다.
 
연습2.23: 지침p를 주면 합법적인 대상을 가리키는지 알 수 있습니까?가능하다면 판단의 방향을 서술한다.만약 안 된다면, 원인도 설명해 주세요.
답: 바늘p가 합법적인 대상을 가리키는지 판단할 수 없다. 바늘p가 초기화되지 않으면 p가 임의의 주소로 저장된다. 이것은 매우 위험한 일이다. 게다가 p가 합법적으로 초기화되지 않으면 악의적으로 주소를 저장하는 것도 위험하다.따라서 프로그래머 스스로 지침이 합법적으로 사용되는지 확인해야 한다.
 
연습 2.24 아래 코드에서 왜 p가 합법적이고 lp가 불법인지/
int i = 42; void *p = &i; long *lp =&I;
답:void*는 특수한 바늘 형식으로 임의의 대상의 주소를 저장할 수 있습니다.세 번째는 두 가지 유형이 다르기 때문에 당연히 오류를 보고하고 부치와 다르기 때문에 지침은 두 가지 유형이 엄격하게 일치하도록 요구한다(특례가 있고 47페이지는 다른 장절이 소개할 것이라고 한다)
연습
#include 

using namespace std;

int main()
{
	int a = 5;
	int b = 10;
	cout << "a = " << a << " b = " << b << endl;// a b   
	int *p = &a;
	cout << "*p = " << *p << endl; //p a  
	*p = *p + 1;
	cout << "a = " << a << endl;   // a 1 
	
	p = &b;
	cout << "*p = " << *p <

좋은 웹페이지 즐겨찾기