指针
1. 指针(把地址赋给一个变量,这个变量就是指针)
是一种变量,里面存储的内容是地址,指向的其他变量的地址,定义的类型可以不一样可以 (int 4个字节) (char1个字节)
地址长度是一致的都是8个字节
**p :二级指针,表示p所指向的地址里面存放的是一个指向类型的指针。
*p:一级指针,表示p所指向的地址里面存放的是一个类型的值。
(1)
在函数中定义变量的时候顺序从上往下,但内存是从高到低的。
例
#include<stdio.h>
void main()
{
int b=12;
char c ='a';
char *p=&c;
printf("%c\r",*p); //p指向c的地址 *为取地址符号
printf("b:%d\r",b);
p++;//地址加加因为先定义的b所以*p++后为b的地址
*p=13;
printf("b:%d\r",b);
}
打印:
a
b:12
b:13
2.一维数组
数组的每个元素的地址是从低到高的。
例:
#include<stdio.h>
void main()
{
int a[]={1,2,3};
int *p=a;
printf("%x\r",p);
printf("%x\r",p+1);
printf("%d\r",p+2);
}
打印:
7fba6b70
7fba6b74
7fba6b78
3.字符指针和字符串
‘0’作为字符串的结束
定义方法(1)
char c[ ] = {‘c’,‘h’,‘i’,‘n’,‘a’,0};(遇到0结束)
char c[ ]= “china”;
在定义一个字符串变量时,你需要有一个足以容纳该字符串的数组或指针,并且要保证为终止符NUL留出空间。
4.数组指针和指针数组
1.指向数组的指针:数组指针
例:
int (*p)[ ]= {1,2,3}; //p指向数组{1,2,3}
int a[]={1,2,3};
int *p = a; //p指向数组第一个元素1
2.数组的元素是指针:指针数组
例:
int *pa[3];//pa是一个含有三个元素的数组,其中每一个元素都是指针。
#include<stdio.h>
void main()
{
int a,b,c;
int *pa[3]={&a,&b,&c};
a=10;
b=12;
printf("%x\r",pa[1]);
printf("%d\r",*pa[1]);
}
5.函数指针和指针函数
1.函数指针:指向函数的指针 int (*pf)( );
函数指针指向的函数而非对象。与其他指针一样,函数指针也指向特定的类型。函数的类型是由返回值和参数列表决定,与函数名无关
例:
定义一个加法函数
int plus(int a,int b)//c是一个指向函数的指针,函数的参数是两个int返回值是int类型
{
return a+b;
}
int (*p)(int a,int b)=plus;//调用一个指向函数的指针p使它指向plus
函数的调用
int a1=plus(1,2);
int a2= *p(1,2);
int a3=p(1,2);
2.指针函数:这个函数返回一个指针 int *pf( )
( 一个函数,只不过这个函数的返回值是一个地址值)
指针函数是指带指针的函数,本质是一个函数。函数的返回值是一个地址值。
6.数组指针
指针数组本质上是一个数组,指针是数组的内容,表示数组中的每个元素都是指针,因此指针数组就是存放指针的数组。
例:
#include<stdio.h>
char *itos(int num){
static char s[10]={0};
char i= 0;
while(num){
s[i++]=(num%10)+'0';
num/=10;
}
return s;
}
void main()
{
int a=12345678;
char *s = itos(a);//返回指针
printf("%s\r",s);
}
打印
87654321
数组指针中的指针可以与之前的函数指针一起使用
即:指向函数的指针数组
例:
先定义加减乘车除的函数 plus minus multiple divide
都为int型
例如
int plus(int a,int b)
{
return a+b;
}
定义指向函数的指针数组
int(*fp[ ])(int,int)={plus,minus,multiple,divide};
7.二维数组和指针
int a [ ][ ]
&a 指向二维数组的指针
a 二维数组名,指向一维数组 a[0],即第0行首地址
a[0], *(a+0), *a 第0行第0列元素地址 ,
&a[1] 第1行首地址
*(a+1) 第1行第0列元素地址
*(a+1)+2 , &a[1][2] 第1行第2列元素地址
*(a[1]+2), *(*(a+1)+2), a[1][2] 第1行第2列元素的值