c+指针运算

Posted 简练编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c+指针运算相关的知识,希望对你有一定的参考价值。

main(){

     charstr1[]={‘a‘,‘b‘,‘c‘,‘d‘};
     charstr2技术分享技术分享 = {{‘1‘,‘e‘},{‘q‘,‘d‘},{‘g‘,‘h‘}};
     char*p_str1 = "123456";
    printf("%c \r\n",str1技术分享);
    printf("%c \r\n",*(str1+1));
    printf("%c \r\n",*(*(str2+1)+1));
    printf("%s \r\n",p_str1+1);
    printf("%c \r\n",*(p_str1+1));
    printf("%c \r\n",p_str1技术分享);
     return0;
  }
 
结果:
23456
2
2
 
 
怎么理解 str1[]  和 *?
[] 和 * 都有两个意义和作用,体现在定义和运算上。[] 在定义的时候表示当前定义的是一个数组,*在定义的时候表示当前定义的是一个指针。str1[]中的str1表示数组第一个元素的指针,我们不必把指针看得如此神秘他与一般变量毫无差别只是他里面存的是一个地址整数而已,而且指针还可以进行特殊运行。
 
假如一个指针为p那么p只是他的表示符他在符号表中对应的内存位置为54321111,这个内存的位置存有另一个地址,*p就是取到指针指向的内存里面的值。p+1是怎么回事呢?假如p的值为54321111,那么p+1=54321112么?不是的奥,指针的加法运算并不是简单的算数运算首先指针要看自己指向的变量类型,假如该类型为x在内存占位为8,那么p+1应该为p+8*1。
我们看下 char str2技术分享技术分享 ={{‘1‘,‘e‘},{‘q‘,‘d‘},{‘g‘,‘h‘}}; 首先str2就是整个数组首元素的指针,str2+1就得到了第二个数组的指针,*(str2+1)就得到了这个指针里面的内容,这里面的内容是啥呢,因为这是个二维数组所以,这里面的内容还是个指针,*(*(str2+1)+1)这样就取到d了。
 
str1技术分享 实际做了什么呢 ?
在定义的时候他在说明str1是一个指向有两个元素的首指针;在运算的时候它实际完成了*(str1+2)这个计算(当然我们指的取值运算时)。也就是说   指针技术分享 = *(指针+x) 这两个是完全相等的运算。

以上是关于c+指针运算的主要内容,如果未能解决你的问题,请参考以下文章

C语言指针Ⅶ 指针运算指针+-整数指针-指针指针的关系运算标准关系标准规定指针和数组二级指针指针数组。

40篇学完C语言——(第七篇)地址算术运算

C语言-指针

C 语言结构体 ( 指针运算与指针内存操作 | 结构体成员偏移量计算 )

c+指针运算

C指针解析 ------ 指针的算术运算