C 語言 指針

指針

指針:指針是一種保存變量地址的變量

指針的聲明:


int *p;        // 聲明一個 int 類型的指針 p
char *p        // 聲明一個 char 類型的指針 p
int *arr[10]   // 聲明一個指針數組,該數組有10個元素,其中每個元素都是一個指向 int 類型對象的指針
int (*arr)[10] // 聲明一個數組指針,該指針指向一個 int 類型的一維數組
int **p;       // 聲明一個指針 p ,該指針指向一個 int 類型的指針

指針的初始化:

/* 方法1:使指針指向現有的內存 */
int x = 1;
int *p = &x;  // 指針 p 被初始化,指向變量 x ,其中取地址符 & 用於產生操作數內存地址

/* 方法2:動態分配內存給指針 */
int *p;
p = (int *)malloc(sizeof(int) * 10);    // malloc 函數用於動態分配內存
free(p);    // free 函數用於釋放一塊已經分配的內存,常與 malloc 函數一起使用,要使用這兩個函數需要頭文件 stdlib.h

非法使用:

#include "stdio.h"

int main(){
    int *p;
    *p = 1;
    printf("%d\n",*p);

    return 0;  
}

指針的使用程序範例

#include <iostream>
using namespace std;

//指針聲明以及初始化 
void init_pointer_1() {
	int x = 1;
	int *p;
	p = &x;
	cout << *p << endl;
}
//指針聲明以及初始化 
void init_pointer_2() {
	int x = 1;
	int *c = & x;
	cout << *c <<endl;
}
//指針錯誤的聲明以及使用方法 
void incorrect_init_pointer() {
	int *d;
	*d = 1 ;
	cout << *d;
}
//一位數組的使用 
void array1_pointer(){
	int a[5] = {1,2,3,4,5};
	int *p;
	p = a;
	cout << *(p+1);
	
}
//數組指針在二維數組上的運用 
void array2_pointer() {
	int a[2][3] = {1,2,3,4,5,6};
	int (*p)[3] = a;
	cout << *(p+1)[0]<< endl;
}
//聲明一個指針指向一個int類型的指針
void pointer_to_intpointer(){
	/*		
		解析: 		 地址    ->    內容	
		   	c      0x6ffde4  ->     1
		    &c     0x6ffdd8  -> [0x6ffde4] 
		    
		    所以要求出1的值,就是讀地址加讀地址*(*(&c)) 
			       
	*/
	int x = 1;
	int *c = &x;
	int **p;//這是一個指針,指向另外一個int類型的指針,它的內容是一個指針的地址 
	p = &c;
	cout << &c << endl; 
	cout << **p;
}
int main() {
	//array2_pointer();
	//array1_pointer();
	pointer_to_intpointer();
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章