1. 程式人生 > >Coursera 學習記錄:指標練習題(關於指標與陣列,以及對& *的理解)

Coursera 學習記錄:指標練習題(關於指標與陣列,以及對& *的理解)

寫在最開始:

‘&’ 相當於“取地址”,等級高一級
‘* 相當於“取地址對應的值”,往下降一級

關鍵知識點:

1、陣列名為常量,不可被賦值
2、char型別的陣列名為首元素的指標,並且在輸出時,自動輸出從指標的位置輸出char陣列的值

char a[] = { "hello,world" };
//想要輸出"world"
cout << a << endl; //輸出hello,world
cout << a + 1 << endl; // ello,world
cout << a + 5 << endl; // ,world
cout << a + 8 - 2 << endl; // world

3、對於基型別相同的兩個指標變數之間,以下哪一項操作缺乏有價值的語義(+ - < =)
‘<’ : 比較地址大小
‘-‘ : 計算同類型字元相隔數
‘=’ : 賦值

    char a[] = { "hollo,world" };
    //想要輸出"hello,world"
    *(a + 1) = 'e';//正確
    //a++;//a = a+1
    //*a = 'e';//錯誤,陣列名為常量,不可被賦值
    cout << a << endl;
    char a[] = { "hello,world" };
    //想要輸出"world"
    cout << a << endl; //輸出hello,world
    cout << a + 1 << endl; // ello,world
    cout << a + 5 << endl; // ,world
    char a[10] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 0 }, *p;
    int i = 8;
    p = a + i;
    cout << p << endl;
    // 9
    cout << p - 3 << endl;
    // 輸出6789
    // 和上一問題同理
    //關於指標間的運算子
    char a[] = { "hello,world" }; 
    char b[] = { "this" };
    char *p1, *p2;
    p1 = a; //*p1 = a; 錯誤,原因,p1為指標變數,與a同級
    p2 = b;

    cout << p1 - p2 << endl;
    //cout << p1 < p2 << endl;//錯誤
    //cout << p1 + p2 << endl;
    //把最大的值放入a[0]
    int a[10] = { 6, 7, 2, 9, 1, 10, 5, 8, 4, 3 }, *p = a, i;
    for (i = 0; i < 10; i++, p++)
        if (a[i] > a[0]) {
            *a = *p;
        }
    cout << *a << endl;
    // *p = a[0]的值,p 是 a[0] 的地址;
    // *(p+i) = a[i]
#include<iostream>
using namespace std;

int main() {
	/*
	char a[] = { "hollo,world" };
	//想要輸出"hello,world"
	*(a + 1) = 'e';//正確
	//a++;//a = a+1
	//*a = 'e';//錯誤,陣列名為常量,不可被賦值
	cout << a << endl;
	*/
	/*
	char a[] = { "hello,world" };
	//想要輸出"world"
	cout << a << endl; //輸出hello,world
	cout << a + 1 << endl; // ello,world
	cout << a + 5 << endl; // ,world
	*/

	/*
	char a[10] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 0 }, *p;
	int i = 8;
	p = a + i;
	cout << p << endl;
	// 9
	cout << p - 3 << endl;
	// 輸出6789
	// 和上一問題同理
	*/

	/*
	//關於指標間的運算子
	char a[] = { "hello,world" }; 
	char b[] = { "this" };
	char *p1, *p2;
	p1 = a; //*p1 = a; 錯誤,原因,p1為指標變數,與a同級
	p2 = b;

	cout << p1 - p2 << endl;
	//cout << p1 < p2 << endl;//錯誤
	//cout << p1 + p2 << endl;
	*/
	
	/*
	//把最大的值放入a[0]
	int a[10] = { 6, 7, 2, 9, 1, 10, 5, 8, 4, 3 }, *p = a, i;
	for (i = 0; i < 10; i++, p++)
		if (a[i] > a[0]) {
			*a = *p;
		}
	cout << *a << endl;
	// *p = a[0]的值,p 是 a[0] 的地址;
	// *(p+i) = a[i]
	*/

	return 0;
}