精华内容
下载资源
问答
  • 指针运算中的优先级 #include<stdio.h> int data[2] = { 100,200 }; int moredata[2] = { 300,400 }; int main() { int* p1, * p2, * p3; p1 = p2 = data; p3 = moredata; printf(" *p1 = %d, *p2 = %d, *...

    指针运算中的优先级

    #include<stdio.h>
    int data[2] = { 100,200 };
    int moredata[2] = { 300,400 };
    int main()
    {
    	int* p1, * p2, * p3;
    	p1 = p2 = data;
    	p3 = moredata;
    	printf(" *p1 = %d,  *p2 = %d,    *p3 = %d\n", *p1, *p2, *p3);
    	printf("运算之前:p1 = %p,  p2 = %p,    p3 = %p\n", p1, p2, p3);
    	printf("*p1++ = %d, *++p2 = %d,  (*p3)++ = %d\n", *p1++, *++p2, (*p3)++);
    	printf(" *p1 = %d,  *p2 = %d,    *p3 = %d\n", *p1, *p2, *p3);
    	printf("运算之后:p1 = %p,  p2 = %p,    p3 = %p\n", p1, p2, p3);
    
    	return 0;
    }
    

    在这里插入图片描述

    展开全文
  • C语言指针运算

    2021-05-21 06:02:19
    C语言指针运算教程在指针变量常用的运算符就是加法和减法运算符,其中,C语言指针变量运算语法p++;参数参数描述p指针变量。说明我们对指针变量 p 进行了自增操作。案例C语言指针变量运算使用加法或者减法对指针变量...

    C语言指针运算教程

    指针变量常用的运算符就是加法和减法运算符,其中,

    C语言指针变量运算

    语法

    p++;

    参数

    参数

    描述

    p

    指针变量。

    说明

    我们对指针变量 p 进行了自增操作。

    案例

    C语言指针变量运算

    使用加法或者减法对指针变量进行运算

    #include

    int main(){

    printf("嗨客网(www.haicoder.net)\n\n");

    int a = 2021;

    int *pa = &a;

    long long d = 1099;

    long long *pd = &d;

    char c = 'a';

    char *pc = &c;

    printf("before pa = %d, pd = %d, pc = %d\n", pa, pd, pc);

    pa = pa+1;

    pd = pd+1;

    pc = pc+1;

    printf("after pa = %d, pd = %d, pc = %d\n", pa, pd, pc);

    return 0;

    }

    程序运行后,控制台输出如下图所示:

    95eec21661dfea81145993ea4557a0ef.png

    我们首先,定义了三个变量,变量的类型分别为

    接着,我们分别将指针变量加 1,最后,我们打印了未加 1 之前的指针变量的值和加 1 之后的指针变量的值,我们可以看到,int 类型的指针变量加了 4,long long 类型的指针变量加了 8, 而 char 类型的指针变量加了 1。

    我们可以看到,对指针都进行加 1 操作,但加的具体的数值却是不一样的,而且所加的数值正好等于该指针所指向的变量所占的字节数。

    这是因为,如果一个指针指向了

    C语言指针移动

    使用自增和自减对指针进行移动

    #include

    int main(){

    printf("嗨客网(www.haicoder.net)\n\n");

    int a = 2021;

    int *pa = &a;

    long long d = 1099;

    long long *pd = &d;

    char c = 'a';

    char *pc = &c;

    printf("before pa = %d, pd = %d, pc = %d\n", pa, pd, pc);

    pa = pa++;

    pd = pd++;

    pc = pc++;

    printf("after pa = %d, pd = %d, pc = %d\n", pa, pd, pc);

    pa = pa--;

    pd = pd--;

    pc = pc--;

    printf("last pa = %d, pd = %d, pc = %d\n", pa, pd, pc);

    return 0;

    }

    程序运行后,控制台输出如下图所示:

    5808e4395f425b0552e1dbba0c64791a.png

    我们可以看到,我们使用自增和自减对指针进行移动,移动的字节数同样是指针所指向的数据类型的字节大小。

    C语言指针运算教程总结

    在 C 语言中,指针变量保存的是变量的地址,变量的地址本质上也是一个整数,因此,我们可以使用运算符对指针变量进行运算。

    指针变量常用的运算符就是加法和减法运算符,其中,自增和自减运算符用的最多。对指针变量进行自增或者自减也叫做指针变量的移动。

    展开全文
  •  是不是对指针的任何运算都是合法的呢?...除了加法运算之外,你还可以对指针执行一些其他运算,但并不是很多。  指针加上一个整数的结果是另一个指针。问题是,它指向哪里?如果你将一个字符指...

    转载:https://www.cnblogs.com/candyming/archive/2011/11/26/2263090.html

            是不是对指针的任何运算都是合法的呢?答案是它可以执行某些运算,但并非所有的运算都合法。除了加法运算之外,你还可以对指针执行一些其他运算,但并不是很多。

            指针加上一个整数的结果是另一个指针。问题是,它指向哪里?如果你将一个字符指针加1,运算结果产生的指针指向内存中的下一个字符。float占据的内存空间不止1个字节,如果你将一个指向float的指针加1,将会发生什么?它会不会指向该float值内部的某个字节呢?

            答案是否定的。当一个指针和一个整数量进行算术运算时,整数在执行加法运算前始终会根据合适的大小进行调整。这个“合适的大小”就是指针所指向类型的大小,“调整”就是把整数值和“合适的大小”相乘。为了更好的说明,试想在某台机器上,float占据4个字节。在计算float型指针加3的表达式时候,这个3将根据float类型的大小(此例中为4)进行调整(相乘),这样实际上加到指针上的整型值为12。

            把3与指针相加使指针的值增加3个float的大小,而不是3个字节。这个行为较之获得一个指向一个float值内部某个位置的指针更为合理。下表包含了一些加法运算的例子。调整的美感在于指针算法并不依赖于指针的类型。换句话说,如果p是个指向float的指针,那么p+1就指向下一个float,其他类型也是如此。

     1.算术运算

        C的指针的算术运算只局限于两种形式。第一种形式是:    指针+-整数  标准定义这种形式只能用于指向数组中某个元素的指针,如图所示:

    并且这类表达式的结果类型也是指针。这种形式也适用于使用malloc函数动态分配获得的内存。

    对一个指针加1使它指向数组中的下一个元素,加5使它向右移动5个元素的位置,依次类推。把一个指针减去3使它向左移动3个元素的位置。

    第二种类型的指针运算具有如下的形式:   指针—指针

    只有当两个指针都指向同一个数组中的元素时,才允许从一个指针减去另一个指针,如下所示:

    两个指针相减的结果的类型是ptrdiff_t,它是一种有符合整数类型。减法运算的值是两个指针在内存中的距离(以数组元素的长度为单位,而不是以字节为单位),因为减法运算的结果将除以数组元素类型的长度。

    如果两个指针所指向的不是同一个数组中的元素,那么它们之间相减的结果是未定义的。程序员无从知道两个数组在内存中的相对位置,如果不知道这一点,两个指针之间的距离就毫无意义。

    2.关系运算:   <   <=   >   >=  不过前提是它们都指向同一个数组中的元素。根据你所使用的操作符,比较表达式将告诉你哪个指针指向数组中更前或更后的元素。标准并未定义如果两个任意的指针进行比较会产生什么结果。

    展开全文
  • C语言指针——指针的运算,指针运算说指针之前,先说两个比较不相关的东西,也当做是一种知识的补充。看下面的代码:#include int main(void){char *s = "Hello world.";printf(s);}运行这段代码,会出现错误吗?...

    C语言指针——指针的运算,指针运算

    说指针之前,先说两个比较不相关的东西,也当做是一种知识的补充。看下面的代码:

    #include

    int main(void)

    {

    char *s = "Hello world.";

    printf(s);

    }

    运行这段代码,会出现错误吗?如果出现错误,是什么错误?

    分析:printf一种常规的用法就是printf("Please input a data:");这种用法相信很多人都使用过,但是将这种用法分析一下,这样的用法printf函数接收到的参数是一个常量字符串的首地址,然后就可以输出这个字符串,所以上面的代码也是将字符串的首地址(存放于字符型指针s中)传递给了printf,所以这段代码的运行不会出现任何问题,甚至编译的时候连警告都不会出现。再看下面的一段代码:

    #include

    int main(void)

    {

    char *s = "Hello world.";

    printf(s, 1, 2, 3);

    }

    请问这段代码是否正确,如果不正确,错误出在哪里?

    分析:要分析这个问题也还是比较容易的,printf函数和scanf函数是C语言中典型的两个变长参数函数,printf也不知道自己会接收到多少个参数,它唯一知道的就是如果在输入的字符串说明符中有多少个输出控制符(%d等)就会到后面去解析多少个参数,如果解析不到的话这种情况下才会报错。但是如果前面并没有说明需要参数,而后面跟了参数的话,这个它是不会理会的,所以这段代码编译和运行都不会出现问题,还是跟上面一样,编译的时候甚至警告都不会出现。

    现在开始言归正传说说指针,这次就简单的说说指针的加减运算,请看下面一段代码:

    #include

    int main(void)

    {

    int a[10];

    printf("%p %p ", &a[0]+1, &a[1]);

    }

    请问程序输出的两个值一样吗?如果不一样,两者相差多少?

    分析:这个问题需要对指针的运算理解比较深入才能答对,正确的答案是两者输出是一样的,可能很多人碰到这个问题的时候会想,&a[0]之后得到的是第0个单元的地址,这个地址和&a[1]也就是第1个单元的地址应该是相差sizeof(int)个字节,所以两者输出应该相差3。但是这样的算法忽略了指针的加减运算规则,指针或者说地址的运算往往依赖于指针或者地址的类型,比如我们常常会用int *p=a; printf("%d ", *p++);这种用法,通过p++就可以指向下一个int类型的单元!这就说明p里面的值被p++这条语句增加了4,这一层的运算程序员是看不见的,后面实质进行的运算相当于p=p+1*sizeof(int);这里也是一样,int型的地址加1,并不是地址值简单的加1,而是加了sizeof(int)个1,所以两者输出是一样的。这个问题可以定义一个字符型的变量s,然后定义一个int类型的指针p,使用p=&s来给p赋值,这个时候编译器会给出诸如:不能用char

    *赋值给int *指针的错误或者警告,这个也证明对某种类型的变量进行取地址操作,得到的数据类型是该数据类型指针。再看一个更极端的例子:

    #include

    int main(void)

    {

    printf("%d ", (int *)0x04-(int *)0x00);

    }

    这个程序的输出是多少呢?

    程序运行之后输出了1,这个当然是在32位机上运行的结果,这个例子可以有助于理解上面的分析过程。

    有关C语言指向指针的指针

    指针变量能指向任意一个变量(包括指针变量)

    指向指针的指针定义方法 ,例如int **p; 定义了一个指针变量p,他指向另一个指针变量(该指针变量又指向一个整型变量),是一个2级指针,由于指针运算符*是按自右向左顺序结合,因此上述定义相当于:int *(*p); (*p)是指针变量形式,它外面的*表示p指向的又是一个指针变量,int表示后一个指针变量指向的是指针变量

    怎样使一个指针变量指向另一个指针变量呢?

    int **p1;

    int *p2;

    int i=3;

    p2=&i; (使p2指向i)

    p1=&p2; (使p1指向p2)

    C语言指针数组FOR运算

    楼主,这个问题如果要用指针的话,应该使用数组指针,不是指针数组哇,写法如下。

    main()

    {

    int a[50],*p;

    float avg=0.0;

    p=a;

    for(i=0;i<50 && *p>0;i++,p++) \\输入负数则停止输入;

    {

    scanf("%d",p);

    avg=avg+*p;

    }

    avg=(avg-*p)/i;

    printf("%f",avg); \\输出平均值;

    }

    http://www.dengb.com/ASPjc/885271.htmlwww.dengb.comtruehttp://www.dengb.com/ASPjc/885271.htmlTechArticleC语言指针——指针的运算,指针运算 说指针之前,先说两个比较不相关的东西,也当做是一种知识的补充。看下面的代码: #include stdio....

    展开全文
  • C语言指针运算

    2021-09-03 13:25:08
    C语言指针运算 指针变量的运算两个指针变量之间的运算指针变量自身的运算 指针变量可以进行某些运算,指针的运算本身就是地址运算,。可以通过将指针加减一个整数,或者通过对指针赋值来移动指针。如p+n,p-n,p++,...
  • 1.上代码: #include <stdio.h> #include <stdlib.h> int main() { int a[] = {1,2,3}; int i; int *pr = NULL; pr = &a; int length = sizeof(a)/sizeof(int); printf("从0开始输出:\n... p
  • C语言 指针运算

    千次阅读 2017-08-31 13:52:50
    赋值运算 p=&a; //将变量地址赋值给指针 p=array; //将数组地址赋值给指针 p=&array[i]; //将数组元素赋值给指针 p1=p2; // 将指针地址赋值给指针# include <stdio.h>//引用函数库 void main(){ int a = 10;//...
  • C语言指针的算术运算

    千次阅读 2018-06-18 13:35:37
    之前在学习指针时,我们知道指针其实也是一种变量,既然这样,那么指针应该和普通变量一样,可以进行算术运算。下面我们介绍指针的加减运算。 先看一个实例: #include <stdio.h> int main() { int ...
  • * 运算符的作用是“解引用”它的操作数(操作数必须是指针类型),所以 * 表达式解引用的就是 p,也就是会得到 p 所指的变量。你发现了吗?我这里的描述都是在说“表达式的值”什么的,尤其是提到 ++ 表达式也是...
  • C语言指针知识点

    千次阅读 多人点赞 2019-05-08 21:11:02
    地址与指针 每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。 请看下面的实例,它将输出定义的变量地址: #include <stdio.h> ...
  • 指针运算1.1 算术运算1.2 单位长度2. 指针类型 1. 指针运算 1.1 算术运算 加减+、- 指针与整数相加:表示指针指向下个变量。 指针与整数相减:表示指针指向上个变量。 指针与指针相减:两个指针的元素间隔...
  • 在本文中,我们将总结C语言指针运算。关键词 C语言 运算 指针指针是C语言最强大的功能,也是C语言中最难以掌握的功能。掌握指针的应用,可以使程序简洁、高效。每一个学习和使用C语言的人,都应当深入的学...
  • C语言指针变量的运算

    2021-05-21 01:56:40
    让我们了解一下C语言指针变量如何运算吧!1.指针运算符***1***取地址运算符&取地址运算符&是单目运算符,其结合性为自右至左,其功能是取变量的地址。在scanf函数及前面介绍指针变量赋值中,我们已经了解并...
  • C语言指针与指针之间的加减运算

    千次阅读 2020-06-05 10:15:14
    (1)指针指针可以做减法操作,但不适合做加法运算; (2)指针指针做减法适用的场合:两个指针都指向同一个数组, 相减结果为两个指针之间的元素数目,而不是两个指针之间相差的字节数。 比如:int int_array[4...
  • c语言指针用法详解,通俗易懂超详细!

    千次阅读 多人点赞 2021-07-18 00:10:30
    文章转自:无际单片机大家好,我是无际。今天给大家来讲解一下指针。我会由浅到深,最后结合实际应用讲解,让大家学会指针的同时,知道大佬们都用指针来干嘛!长文预警!全文大约5200多字,学指针看...
  • 深入理解C语言指针

    万次阅读 多人点赞 2019-09-28 08:36:51
    一、指针的概念 要知道指针的概念,要先了解变量在内存中如何存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像酒店的门牌号一样。 1.1、变量和地址 先写一段...
  • 文章目录C语言学习一.指针与一维数组二.指针与二维数组 C语言学习 一.指针与一维数组 定义一个数组,定义一个指向数组首元素的地址 int arr[5]={1,2,3,4,5}; int* p = arr; 注意这句话 数组名就是数组首元素的...
  • C语言指针变量的自增自减分析(指针的算数运算

    千次阅读 多人点赞 2018-09-08 16:19:29
    1. 指针变量是没有乘除运算的; 2. 指针变量是地址,指针变量的加减是地址的加减, 举例说明: 假设:整型指针变量p指向整型数组a的首元素;(p = a) 分析: 1) p++; //p自加,使自己指向先一个元素a[1] 2...
  • C语言指针详解(经典,非常详细)

    万次阅读 多人点赞 2019-06-01 17:26:12
    要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,...
  • C语言指针学习心得

    千次阅读 2021-05-21 10:30:55
    常言道,没有学会指针等于没有学C语言。所以我下定决心,以一个设计师的身份来搞定她!指针C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地...
  • C语言指针——指针的运算

    千次阅读 2014-09-25 22:31:57
    指针之前,先说两个比较不相关的东西,也当做是一种知识的补充。看下面的代码: #include int main(void) {   char *s = "Hello world.";  printf(s); } 运行这段代码,会出现错误吗?如果出现错误,是什么...
  • C语言指针的算术运算

    千次阅读 2018-04-07 23:06:07
    一、指针的加法 首先给一串关于指针加法的代码: ...//指针算术运算 int main() { int arr[] = {1,2,3,4,5,6,7,8,9,10};  int *p = arr; *p = 10; p++; *p = 20; printf("%08x,%08x\n",arr[0]...
  • C语言中的指针运算

    2021-05-21 01:48:00
    本文介绍了C语言中的指针常量和指针变量的运算规则,以及对数组的访问。Abstract: The pointer is the essence, focus and difficult of C language which is also the basis of C language Series. This article ...
  • C语言指针运算—— 算术运算,关系运算

    千次阅读 多人点赞 2017-04-24 07:33:22
    算术运算  是不是对指针的任何运算都是合法的呢?答案是它可以执行某些运算,但并非所有的运算都合法。除了加法运算之外,你还可以对指针执行一些其他运算,但并不是很多。(乘法,除法就不可以)  指针加上一个...
  • C语言指针知识点小结

    万次阅读 多人点赞 2020-01-10 15:40:06
      C语言指针基础知识点(一)–指针及指针变量   C语言指针基础知识点(二)–指针变量的引用   C语言指针基础知识点(三)–指针变量作为函数参数   C语言指针基础知识点(四)–通过指针引用数组   C语言指针...
  • C语言指针三——指针运算本质 对于如下的声明: int arr[]={1,3,5,7,8}; int *p; p=arr; 尽管最后一个语句看起来是将一个指针赋值为数组名,但C语言中并不存在指向数组的指针,日常说某某个指针指向了数组只不过是...
  • 开辟的连续空间,如 int *arr = (int*)malloc(sizeof(int)*3) 每一个元素值为“乱数” 分析这个问题的意义: 在C语言中布尔运算,0为假,非0为真。 故而有 while(p->next){...}这类写法。 注意,初值是0 还是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,355
精华内容 34,942
关键字:

c语言指针的运算

c语言 订阅