指針
指針:指針是一種保存變量地址的變量
指針的聲明:
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;
}