我刚开始研究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;
}
在第16行出现问题,当我修改*ptr+=1
到*ptr++
。预期的结果应该是整个数组和数字1,但是当我使用*ptr++
的结果是0。
有没有之间的任何diffirence +=1
和++
?我以为他们都是一样的。
allocateIntArray
是一个不好的名字,因为看来您malloc
是函数中的数组,但您不是。我建议fillIntArray
改为。2)您不使用的返回值allocateIntArray
。建议您将返回类型更改为void
。3)不应该if (ptr != NULL)
在功能increasePointer
上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
未使用。
p+=1
就像++p
,而不是p++
string
。