C语言中指针有哪些运算,c语言关于指针运算

1,c语言关于指针运算在C语言中这段程序非法 , C中不存在int& b这样的引用在C++中结果为121
2,C语言的指针运算符号*称为指针运算符(单目运算符),也称取内容运算符 。是用来表示指针变量和它所指向的变量直接的联系 。如果已经定义i_pointer为指针变量 , 则(*i_pointer)是i_pointer所指向的变量 。其实*i_pointer也是一个变量,它和变量i是同一回事 。下面两个语句作用相同 。1、i=3; 2、*i_pointer=3; 第二个语句的含义是将3赋给指针变量i_pointer所指向的变量 。取地址运算符&,可以取得变量在内存中的地址 。例如: pointer_1=&a; 表示把变量a的地址赋给pointer_1 * (*(a+1)+j)表示1行j列元素a[1][j]的值 。*(a+1)+j表示1行2列元素a[1][j]的地址 。这个没有为什么,就是规定的吧!
3,c语言中指针的运算是怎么算的如pa指针自加一位就是指向该类型的下一个单元也就是实际增加的地址值 为sizeof(*pa)偏移是2*sizoef(char)那么多,后的地址赋给p1,你用笔自己画下内存分配图,虽然它地址变来变去的,但是 地址的内容是没有变的 , p1的寻址范围还是sizoef(int)pa指向的类型+1指向pa后面一个地址要看什么类型,它会指向下一个变量的首地址,比如p指针是long int型的,p++就会跳过四个字节指向下一个 。一般指针自加运用于数组中,因为这样可以方便指针一个个指向数组中的成员 。pa++就是pa = pa+1但是这个1的字节数是根据pa指针的类型来取值的比如int* pa;那这个1就是sizeof(int)double*pa;那这个1就是sizeof(double)数组的话,很简单,就是指向下一个元素的地址!【C语言中指针有哪些运算,c语言关于指针运算】
4,C语言指针变量运算目前只有和整型的加减貌似可执行,是不是太奇葩了?一点也不是 , 因为只需要加减运算int *p=(int *)0xA00000000;int *p1=p+10;int x;下面是指针可以进行的运算 。p-x;//指针p+x;//指针p--;//指针p++;//指针++p;//指针--p;//指针!p; // 整数或boolp-p1;//整数个数p+10;//指针p-10;//指针指针不需要其他运算?。。。。∧训滥闶窍胝庋?p+=(p-p1)*200;p-=(p-p1)/200;p=(int *)((int)p/20);指针类型就其“本质”而言就是一个用于记录内存地址的16位(在16位机上)或32位(在32位机上)的整型值(用于表示某个内存地址,就好比某个宾馆里的房间号) , 拿它与整型值n做运算显然是可以的,表示向前或向后数n个“单位长度”的地址(向前或向后数n个房间) 。与浮点型运算,你觉得它有什么意义呢?比如402.52房间?除了可与整型运算,还有字符型啊,亲!你这么做才奇葩 。指针是32位的地址,你可以试试输出一个指针看看,是一个整数 。相加的结果还是地址,但是你见过用浮点数表示内存地址的码?p=&k,中p是指针变量,而*p=&k;也是指针变量,只不过这个语句只能在定义的时候出现,即 int k,*p=&k; //只能在定义的时候出现 这个语句等价于 int k,*p; p=&k;奇葩,是用浮点数表示内存地址的?楼上正解 。指针与整型数的相加减代表着地址的移动 。只有指针指向的数据(*p)才可以与别的数据类型相运算 。5 , C语言指针运算详解去百度文库,查看完整内容>内容来自用户:zzbo2022让你不再害怕指针前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:intp;//这是一个普通的整型变量int*p;//首先从P处开始,先与*结合,所以说明P是一个指针,然后再与int结合,//说明指针所指向的内容的类型为int型.所以P是一个返回整型数据的指针intp[3];//首先从P处开始,先与[]结合,说明P是一个数组,然后与int结合,//说明数组里的元素是整型的,所以P是一个由整型数据组成的数组int*p[3];//首先从P处开始,先与[]结合,因为其优先级比*高,所以P是一个数组,//然后再与*结合,说明数组里的元素是指针类型,然后再与int结合,//说明指针所指向的内容的类型是整型的,所以P是一个由返回整型数据//的指针所组成的数组int(*p)[3];//首先从P处开始,先与*结合,说明P是一个指针,然后再与[]结合//(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的//内容是一个数组,然后再与int结合,说明数组里的元素是整型的.//所以P是一个指向由整型数据组成的数组的指针int**p;//首先从P开始,先与*结合,说是P是一个指针,然去百度文库,查看完整内容>内容来自用户:zzbo2022让你不再害怕指针前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:intp;//这是一个普通的整型变量int*p;//首先从P处开始,先与*结合,所以说明P是一个指针,然后再与int结合,//说明指针所指向的内容的类型为int型.所以P是一个返回整型数据的指针intp[3];//首先从P处开始,先与[]结合,说明P是一个数组,然后与int结合,//说明数组里的元素是整型的,所以P是一个由整型数据组成的数组int*p[3];//首先从P处开始,先与[]结合,因为其优先级比*高,所以P是一个数组,//然后再与*结合,说明数组里的元素是指针类型,然后再与int结合,//说明指针所指向的内容的类型是整型的,所以P是一个由返回整型数据//的指针所组成的数组int(*p)[3];//首先从P处开始,先与*结合,说明P是一个指针,然后再与[]结合//(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的//内容是一个数组,然后再与int结合,说明数组里的元素是整型的.//所以P是一个指向由整型数据组成的数组的指针int**p;//首先从P开始,先与*结合,说是P是一个指针,然*q++ 和 *(q++)是一样的 没错,括号是会提高优先级,但是对于q++这个自加运算是没有作用的.后置的++做自加运算都是等当前语句处理完了才自加1的.所以*(q++)可以看成是 *(q); q=q+1; 可以看出括号只括着q...这样的括号其实是并没有提高任何优先级的...

    推荐阅读