当前位置 : 首页 > 传奇新闻 > 英雄合击 > 正文

关于C语言指针[第一季]

编辑:迷失传奇版本浏览:284时间:2023-01-03 16:06:06

[关于指针]

&地址运算符*指针运算符或间接寻址运算符

1.指针的一个很重要的用途:作为实参传给函数.

2.注意下面两条语句:

a=*p++;a=(*p)++;

由于*和++运算符属于同级,是右结合的。所以第一个相当于“a=*(p++);”又因为++运算符位于变量p的后面,所以是后缀运算,,所以a=*p++;相当于a=*p;p=p+1;

而第二条语句a=(*p)++;相当于a=*p;*p=*p+1;

3.数和数组的指针

在函数的形参和实参中,

如果一个数要做指针传递,

形参voidFuc(void*a);实参Fuc(&a);

而数组时voida[N];

形参voidFuc(voida[]);实参Fuc(a);

4.字符指针

以字符数组和字符指针对比

charstr[10]={"china"};char*ptr="china";

str代表字符串在内存中的首地址。

ptr代表指向字符串"china"首地址的一个指针。ptr==str;

对于字符指针赋值,必须让指针指向一个数组的首地址。

对于字符数组的首地址,是常量不能改变,用*(str+i)方式引用,对于字符指针可以改变可以通过*(ptr+i)或者*(++ptr)方式引用

5.二维数组的指针引用

charstr[5][5],*p;

对于二维数组中的某个值str[2][2]的引用可以直接写成cout<<*(*(str+2)+2);用二维数组名直接引用。

也可以采用

p=a[2];*(p+2);方式

或者可以

p=*str;*(p+2*5+2)

**注意一点,不要误写成p=str;这样就成了第一行的首地址了,而不是第一行的第一列的值的地址。。

**还有一种用[行数组指针]的写法

char(*p)[5];p=str;这样p就和数组名str一样可以用cout<<*(*(p+2)+2)方法引用了

str[0]==*str==&str[0][0];

[关于二维数组指针的误区]

a[5][5];

要吧a和a[0]区分开,虽然都是首地址,但是指向的对象不同。a[0]指的是二维数组中一维数组的首地址,对它进行寻址运算得到的是一个数组值,即a[0]数组的第一个元素的值a[0][0].可是a是一个数组的名字它指向的是所属元素的首元素。对他寻址得到的是首元素a[0][5]是一个一维数组。所以二者不可混淆。

行数组指针定义成char(*p)[5];它代表的是*p有5个char型的元素分别指向(*p)[0],(*p)[1],(*p)[2],(*p)[3],(*p)[4],即指向5个char型数组



转载请注明出处:迷失传奇版本 ,如有疑问,请联系(如有侵权内容联系本站管理员 )。

本文地址: https://www.mishipk.com/news/60890.html

相关内容更多
    游戏视频更多
        最新游戏推荐更多