C语言指针学习笔记

来源:互联网 发布:同步带设计软件下载 编辑:程序博客网 时间:2024/05/22 15:55

一、指针变量

1、定义格式

  • 类型名 *指针变量名
  • “*”不是运算符,只是一个定义指针变量的标志

2、指针变量的引用

  • “&”取地址运算符,int a =20, *p; p = &a;
  • “*”取内容运算符。int b=*p

二、一维数组与指针

若数组为形参,则将数组名做指针变量来处理;

  • &与*互逆
  • *与[]等价
  • &与[]互逆

1、指向数组元素的指针

  • 指向数组元素的指针与指向普通元素的用法一样

2、指向一维数组的指针

  • 数组名代表数组首地址,是不能被改变的常量

  • 当指针变量指向数组中某一元素是,指针变量+1指向数组下一个元素。p±n表示前后移动n个元素,如:

float a[10]; float *p;p = &a[4];
则p-3指向a[1].

三、多维数组与指针

  • int a[3][4];

    • a+1是跳一行
    • a+i 是行指针,指向一整行
    • *(a+i) 和 a[i] 一样,都是一个列指针,指向一个元素
    • *(a+i)+j 和 a[i]+j 一样,都表示a[i][j]的地址,即&a[i][j]
    • ((a+i)+j)、(a[i]+j )、((a+i)[j])和a[i][j]一样,都表示元素
  • 一位数组名表示的是列指针

  • 二维数组名表示的是行指针
  • 只有列指针才是“真正”指向元素

1、指向二维数组元素的指针变量

int a[3][4];

// 这里p是一个列指针,所以画数组a要按列画。
// 行指针的定义在下面,行指针出现则把二维数组画成二维表

int *p = &a[0][3]; 

则:
p+1指向a[1][0]
p+4指向a[1][3]
注:p±n表示前后移动n个元素!

2、指向有m个元素组成的一维数组的指针变量

定义:类型名 (*指针变量名)[m]

int a[4][m];int (*p)[m];

四、字符串与指针

c语言中字符串就是首地址

char *p ="china";

这里p存的就是c的地址;

p="Chinese";

这里也是合法的,p存的就是大C的地址;

五、函数与指针

  • 函数名是函数所占空间的起始地址。

  • 不需要加形参

  • 定义指向函数的指针变量的方式:
 类型名 (*指针变量名)(); int min(int a,int b) { return a > b ? b : a } int max(int a,int b) { return a > b ? a : b } main() { int x = 6,y= 10;   int (*p)();   p=max;   printf("%d",p(x,y)) // 10   p=min;   printf("%d",p(x,y)) // 6 }

六、返回指针的函数

类型名 *函数名(形参列表)
{

}

int *fun(int *x, int *y){    if(*x<*y)        return x;    else        return y;}

七、指针数组

类型名 *数组名【常量表达式】

int *s[10] //这是一个指针数组常量,只能在赋值号右边int (*p)[10] //这是一个变量

指向指针的地址变量

类型名 **指针变量名;

int a = 3;int *p = &a; //指向内容的指针int **k = &p;//指向指针的指针,二级指针

八、空指针

int *p=NULL;
原创粉丝点击