栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言基础二

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言基础二

指针

指针的定义:

[存储类型]        [数据类型]        *指针变量名;

指针初始化的两种方式:

1.在声明指针变量的同时为指针变量赋值

int a=10;
int *ptr=&a;

2.

int a=10;
int *ptr=NULL;
ptr=&a;

*:可以取出指针指向的地址的值。

int a=10;
int *p=&a;
int b=*p;    //b的值为10

指向指针的指针(二级指针)

定义格式:

数据类型        **指针变量名;

int **p;    //定义了一个二级指针,指针指向的地址的值是另一个指针的地址
int a=10;
int *q=&a;
p=&q;

指向数组的指针(数组指针)

定义格式:

数据类型  (*指针变量名)[数组元素个数n];

int (*p)[3];    //定义了一个指向有三个int型元素的数组的指针

//用法:
int a[2][3];
p=a;
int c=p[1][2];
p=p+1;    //p指向第二行首地址

指向函数的指针(函数指针)

定义格式:

数据类型  (*指针变量名)(参数列表);

int (*fun)(int a,int b); 

定义了一个指向函数的指针,这个函数的返回值为int类型,有两个int类型的参数

//用法:

int add(int a,int b)
{
    return a+b;
}


fun=add;

int result=fun(2,3);

指针数组

定义格式:

数据类型 *指针变量名[元素个数n];

int *p[3];    //定义了一个数组,数组的元素是指向int类型的指针。

//用法:
int a,b,c;
p[0]=&a[0];
p[1]=&a[1];
p[2]=&a[2];

指针的算术运算

指针的算术运算有:

int arr[10];

int *p=&a[5];

+:p=p+n;        //指针向地址大的方向移动4*n个字节,4=sizeof(int)

-:p=p-n;        //指针向地址小的方向移动4*n个字节

++:p++;        //指针向地址大的方向移动4个字节

--:p--;               //指针向地址小的方向移动4个字节

两个指针相减:

int *q=&a[8];

int n=q-p;        //n为两个指针指向的地址相隔的数据的个数。

*的优先级和++、--的优先级相同,都高于+、-,当*和++同时出现时,按照自右向左的顺序进行计算,例如:*p++,相当于*(p++),*p+1相当于(*p)+1。

指针的关系运算

指针可以进行的关系运算有:>        <        >=        <=        ==        !=

指向地址大的指针大于指向地址小的指针,如:

int a[10];

int *p=&a[1];

int *q=&a[2];

则:q>p;

指针与数组 指针指向一维数组
int a[10]={1,2,3,4,5,6,7,8,9,10};

int *p=a;

数组名a与a[0]的地址相同,代表数组的首地址,a+1表示向地址大的方向移动4个字节。

&a的值与a[0]的地址相同,代表数组整体的首地址,&a+表示向地址大的方向移动4*10个字节。

访问数组元素a[1]的方式有:

a[1]、*(p+1)、*(a+1)

获得数组元素a[1]的地址的方式有:

&a[1]、a+1、p+1

指针指向二维数组
int a[3][4]={

{1,2,3,4},

{5,6,7,8},

{9,10,11,12}

};

int (*p)[4]=a;

&a+1:移动48个字节;a+1 :移动一行

a[0]+1、&a[0][0]+1:移动4个字节

访问数组元素a[2][3]的方式有:

a[2][3]、*(*(a+2)+3)、p[2][3]、*(*(p+2)+3)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号