c++地址运算符,C语言*运算
Yyds干货库存
C语言中的指针执行数组元素时,C语言允许对指针进行算术运算。
指针操作C语言支持三种格式的指针算术运算,包括指针加整数、指针减整数和两个指针减。还可以用关系运算符来比较指针。
P加整数J表示指针向后移动J个单位(每个单位是指针P的类型所占用的字节数),指向P最初指向的元素之后的第J个元素,如果P指向数组a[i],那么p j指向a[i j]。P减去整数j表示指针向前移动j个单位,指向P最初指向的元素之前的第j个元素。如果P指向数组a[i],那么p-j指向a[i-j]。减去两个指针,得到指针之间的元素个数。如果指针P指向a[i],指针Q指向a[j],那么p-q等于I-J,指针的比较取决于指针所指向的两个元素的相对位置。如果指针P指向a[i],指针Q指向A [J],则P和Q的比较结果由I和J的大小决定,因此适合指针运算的运算符有算术运算符,-,赋值运算符和复合赋值运算符(=,=,-=,-)以及所有关系运算符。
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * int I=0;Printf(请输入%d个整数:,n);for(;i i ) { scanf(%d ,a I);} p=a;sum=0;for(I=0;I I){ sum=* p;p;} printf(这%d个数之和是%d\n ,N,sum);返回0;}
c语言的间接寻址运算符*通常与or运算符一起使用,有以下四种不同的形式:
意义p或(p)先将表达式的值计算为*p,然后p增加1(*p)先将表达式的值计算为p,然后p增加1 p或(p)先将p增加1,然后将表达式的值计算为*p或(p)先将(p)增加1, 然后计算表达式的值为(P)/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * pointer _ 6。 C * * * * * * * * * * *语言中的自增自减和间接寻址运算符* *包括stdio . h # define N 10 int main(){ int a[10]={ 0,1,2,3,4,5,6,7,8,9 };int temp=0;int * p=a;printf( p的初始值是% p,* p的值是%d\n ,p,* p);temp=* p;printf( * p的值是%d,运算后p的值是% p,* p的值是%d\n\n ,temp,p,* p);printf( p的初始值是% p,* p的值是%d\n ,p,* p);temp=*(p);printf( *(p *(p)的值为%d,p的值为% p运算后,* p的值为%d\n\n ,temp,p,* p);printf( p的初始值是% p,* p的值是%d\n ,p,* p);temp=(* p);printf((*p (* p)的值是%d,运算后p的值是% p,* p的值是%d\n\n ,temp,p,* p);printf( p的初始值是% p,* p的值是%d\n ,p,* p);temp=* p;printf( * p的值是%d,运算后p的值是% p,* p的值是%d\n\n ,temp,p,* p);printf( p的初始值是% p,* p的值是%d\n ,p,* p);temp=*(p);printf( *(p)的值为%d,p的值为% p运算后,* p的值为%d\n\n ,temp,p,* p);printf( p的初始值是% p,* p的值是%d\n ,p,* p);temp=* p;printf( * p的值是%d,运算后p的值是% p,* p的值是%d\n\n ,temp,p,* p);printf( p的初始值是% p,* p的值是%d\n ,p,* p);temp=(* p);printf((* p)的值为%d,p的值为% p运算后,* p的值为%d\n\n ,temp,p,* p);返回0;}
指针和数组可以使用数组的名称作为指向数组第一个元素的指针。但是,数组名是指针常量,不能赋值。
函数中数组形式的形参都是指针。为了明确指针形式,数组形式的形参可以看作指针,两者完全一样。
同样,指针也可以用作数组名,指针p的表达式p[i]等价于*(p i)。
多维数组的元素按顺序存储在内存中。如果获得第一个元素的指针,可以通过重复和增加指针来访问每个元素。
在C中,N维数组视为一维数组,每个数组元素为n-1维数组,以此类推。因此,对于数组int a[N1][N2].[Nm],A是一维数组的指针,其元素是N维数组,所以指针增减的移动单元是N维数组,a[N1]是一维数组的指针,其元素是n-1维数组,所以[N1]指针增减的移动单元是n-1维数组。
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *指针7 . c * * * * * * * * * * * * * * * * * * * for(;p p - ) printf(%d ,* p);} int Sum(int * a){ int * p=a;int sum=0;for(;p a N;p)sum=* p;返回总和;} int main(){ int a[N];Printf(请输入%d个整数,n);int I=0;for(;i i ) scanf(%d ,a[I]);printf( 10个数的逆序是:);reverse print(a);printf( \ n );Printf(这%d个整数之和是%d\n ,N,Sum(a));返回0;}
参考K.N. King,卢秀峰译。c语言程序设计-现代方法。https://www.coursera.org/course/pkuic人民邮电出版社
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。