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; }
我期望的输出是printf打印值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 问题是您为单个整数分配了空间。但是你试图访问两个整数。这是未定义的行为;这意味着有时它会崩溃,就像你的情况一样,有时它可能会工作,有时它可能会工作,但会产生不可预测的结果 当您递增指针时,您将转到内存中尚未分配的地址
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)++