指针的简介

一.指针

void*指针

它是一个非常包容的指针,可接受任意类型的地址,但是不能直接用*访问,需要先进行强制类型转换才能解引用。

整形指针 :int*

字符指针:char*

const char* pstr = "hello bit.";//本质是把字符串 hello bit. 首字符的地址放到了pstr中。

printf("%s\n", pstr);//打印字符串

printf("%c\n", * pstr);//打印h

注:因为常量字符串不可以修改,所以定义时可以加上const,const表明pstr指针所指向的内容不可修改.

观察下面一组代码,判断str1与str2是否相等,str3与str4是否相等

char str1[] = "helloword";
char str2[] = "helloword";
const char *str3 = "helloword";
const char *str4 = "helloword";
答案是str1不等于str2,str3与str4相等

原因是在C/C++中会把常量字符串存储到单独的一个内存区域,当几个指针指向同一个字符串的时候,他们实际会指向同一块内存。

二.指针数组(一个存放指针的数组

int* arr1[10]; //整形指针的数组

char *arr2[4]; //字符指针的数组

char **arr3[5];//二级字符指针的数组

三.数组指针

能够指向数组的指针,即把数组的地址放入指针中

例如:int arr[10]={1,2,3,4,5};

           int (*pa)[10] = &arr //取的是数组的地址      int(*)[10] -> 数组指针类型

四.函数指针

int (*p)(int x,int y) = &Add;//p为函数指针变量

用p调用函数Add: int sum = (*p)(3,5);     //可有可无

(*(void (*)())0)();

这个表示把0强制转换成一个void(*)()的函数指针,然后去调用0地址处的函数

五.函数指针数组

把函数的地址存到一个数组中,那这个数组就叫函数指针数组

定义:int (*parr1[10])();//是一个int(*)()类型的函数指针

六.指向函数指针数组的指针

它是一个指针,指针指向一个数组,数组的元素都是函数指针;

//函数指针pfun

void (*pfun)(const char*) = test;

//函数指针的数组pfunArr

void (*pfunArr[5])(const char* str);

pfunArr[0] = test;

//指向函数指针数组pfunArr的指针ppfunArr

void (*(*ppfunArr)[5])(const char*) = &pfunArr;

遇到数组与指针时请注意

数组名是数组首元素的地址,除以下两种情况:

一:sizeof(数组名),sizeof内部单独放一个数组名,数组名表示整个数组。计算的是整个数组的大小。

二:&数组名,取出的是整个数组的地址。数组名表示整个数组。 

&(arr+1) 取地址时跳过数组

arr[i]=*(arr+i)

&a[0]==a

&a[1]==a+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值