我刚开始学习C语言,在做一个关于将指针传递给函数作为参数的例子时,我遇到了一个问题。
这是我的示例代码:
这是我的示例代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int* allocateIntArray(int* ptr, int size){
if (ptr != NULL){
for (int i = 0; i < size; i++){
ptr[i] = i;
}
}
return ptr;
}
void increasePointer(int** ptr){
if (ptr != NULL){
*ptr += 1; /* <----------------------------- This is line 16 */
}
}
int main()
{
int* p1 = (int*)malloc(sizeof(int)* 10);
allocateIntArray(p1, 10);
for (int i = 0; i < 10; i++){
printf("%d\n", p1[i]);
}
increasePointer(&p1);
printf("%d\n", *p1);
p1--;
free(p1);
fgets(string, sizeof(string), stdin);
return 0;
}
当我把*ptr+=1
修改为*ptr++
时,问题出现在第16行。预期结果应该是整个数组和数字1,但当我使用*ptr++
时,结果为0。
+=1
和++
之间有什么区别吗?我认为它们都是相同的。
malloc
分配数组内存,但实际上你没有这样做。我建议改用 "fillIntArray"。2)你没有利用 "allocateIntArray" 的返回值。我建议将其更改为 "void" 类型。3)在increasePointer
函数中,判断应该是if (*ptr != NULL)
,而不是if (ptr != NULL)
。4)在malloc
中进行强制转换是不必要的。请参见上面 Sourav 的评论。5)需要将以下代码for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }
和printf("%d\n", *p1); p1--;
包含在if(p1 != NULL)
中。6)"string.h" 没有被使用。 - Spikatrixp+=1
相当于++p
,而不是p++
。 - Kos