Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 递增指针和存储在其中的值 #包括 int main() { int N=4; int*ptr1; //指针存储 //N的地址 ptr1=&N; printf(“增量之前指针ptr1处的值:”; printf(“%d\n”,*ptr1); //递增指针ptr1; ptr1++; *ptr1=5; printf(“增量后指针ptr1处的值:”; printf(“%d\n\n”,*ptr1); 返回0; }_C_Pointers - Fatal编程技术网

C 递增指针和存储在其中的值 #包括 int main() { int N=4; int*ptr1; //指针存储 //N的地址 ptr1=&N; printf(“增量之前指针ptr1处的值:”; printf(“%d\n”,*ptr1); //递增指针ptr1; ptr1++; *ptr1=5; printf(“增量后指针ptr1处的值:”; printf(“%d\n\n”,*ptr1); 返回0; }

C 递增指针和存储在其中的值 #包括 int main() { int N=4; int*ptr1; //指针存储 //N的地址 ptr1=&N; printf(“增量之前指针ptr1处的值:”; printf(“%d\n”,*ptr1); //递增指针ptr1; ptr1++; *ptr1=5; printf(“增量后指针ptr1处的值:”; printf(“%d\n\n”,*ptr1); 返回0; },c,pointers,C,Pointers,我期望的输出是printf打印值4,然后打印值5。 但是在执行第一个printf语句后,代码退出,并且代码从未打印第二个printf。 谁能解释一下我做错了什么? 据我所知,我正在递增一个指针,然后将一个新值存储到递增的地址中。 我理解对了吗?欢迎来到stackoverflow:D 问题是您为单个整数分配了空间。但是你试图访问两个整数。这是未定义的行为;这意味着有时它会崩溃,就像你的情况一样,有时它可能会工作,有时它可能会工作,但会产生不可预测的结果 当您递增指针时,您将转到内存中尚未分配的地址

我期望的输出是printf打印值
4
,然后打印值
5
。 但是在执行第一个printf语句后,代码退出,并且代码从未打印第二个printf。 谁能解释一下我做错了什么? 据我所知,我正在递增一个指针,然后将一个新值存储到递增的地址中。
我理解对了吗?

欢迎来到stackoverflow:D

问题是您为单个整数分配了空间。但是你试图访问两个整数。这是未定义的行为;这意味着有时它会崩溃,就像你的情况一样,有时它可能会工作,有时它可能会工作,但会产生不可预测的结果

当您递增指针时,您将转到内存中尚未分配的地址。如果需要两个整数,可以分配如下数组:

#include <stdio.h> 

int main() 
{ 

    int N = 4; 

    int *ptr1;


    // Pointer stores 

    // the address of N 

    ptr1 = &N; 
  

    printf("Value @Pointer ptr1 before Increment: "); 

    printf("%d \n", *ptr1); 


    // Incrementing pointer ptr1; 

    ptr1++; 

    *ptr1=5;

    printf("Value @Pointer ptr1 after Increment: "); 

    printf("%d \n\n", *ptr1); 

    return 0; 
}

现在,当您递增指针的地址时,您将到达已分配的有效内存。

您递增指针。
但看起来您希望增加指针指向的值。
试试这个:

int N[2] = {4, 4};
括号很重要:它们表示递增的是指向的指针的内容-- 也就是说,
++
运算符应用于子表达式
(*ptr1)


另请参见中的。

当您尝试递增指针时,c所做的是:“ptr+1*sizeof(int)”(假设ptr是一个int指针)。所以,现在,它指向变量“N”(假设您在64位机器上)前面的4个字节,该变量可能被另一个程序占用。当您取消引用它时,您将获取存储在“N”前面4个字节的值。话虽如此,我建议:

(*ptr1)++;

多亏这个程序工作得很好,我试图用指针存储整数数据,并递增指针以存储下一个值。但是,我试图增加指针的内容,而不是它的内容(不使用想要尝试存储和检索数据的数组),但是,正如u所说的(*ptr1)++实际上增加了指针的内容,但是,指针地址似乎在增加。我说得对吗?是否(*ptr1)++递增指针地址&而不是指向的内容。
(*ptr)++