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;
}

 

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