指针是什么
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电 脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将 地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
指针的分类
整型指针:int * p
字符指针:char * p
指针数组:int *p[5]
数组指针:int (*p)[5]
函数指针:void (*p)()
函数指针数组:void (*p[5])()函数数组指针:void (*(*p)[5])()
整型指针:int * p
#include <stdio.h>
int main()
{
int a = 10;//在内存中开辟一块空间
int *p = &a;
return 0; }
先声明变量a,我为变量a开辟空间,用&(取地址符)得到a变量在内存中地址,并让指针p指向这个地址。
int * p一次访问四个(int)字节个内存空间
字符指针:char * p
- 第一种使用方法,指向一个字符。该指针所存储的内容为该字符在内存中的地址。
#include<stdio.h>
int main()
{
char ch = 'w';
char *p = &ch;
*p = 'w'
return 0;
}
- 第二种使用方法,指向字符串首字母的地址。若需要打印一串字符串,则只需保存其字符串首地址,依次打印,直到遇见‘\0’结束。
#include<stdio.h>
int main()
{
char* p = "hello world";
printf("%s\n", p);
return 0; }
字符指针在内存中一次访问一个(char)字节个内存空间
指针数组(int *p[5])与数组指针(int (*p)[5])
数组为相同类型数据类型的变量的集合,指针数组顾名思义为保存相同类型指针类型变量的集合。
数组指针,同样顾名思义,先为一个指针,该指针所指向的是一个数组。
- int * p[5]:p与[5]结合先为一个数组,数组中所存储的变量类型为int *
- int (*p)[5]:p与*结合,声明p为一个指针类型,该指针指向一个为int类型,长度为5的数组。该指针一次所访问的空间,为声明的数组大小的空间
特别注意指针数组与数组指针的区别
函数指针:void (*p)()
首先p和*结合证明为一个指针,在与()结合,表明指向为一个函数,void表明函数返回类型
函数指针数组:void (*p[5])()
首先p与[5]结合,表明为一个数组,在与*结合,表明为一个指针,指针类型为一个返回值为void的函数
函数数组指针:void (*(*p)[5])()
指针函数数组为指向函数数组的指针
p先与*结合表明为一个指针,指针所指的为一个数组长度为5,返回值为void的函数数组