C 我能';我不明白为什么我的数组大小不对
我对这个C程序有问题。我不明白为什么即使我用C 我能';我不明白为什么我的数组大小不对,c,arrays,pointers,sizeof,C,Arrays,Pointers,Sizeof,我对这个C程序有问题。我不明白为什么即使我用malloc()指令初始化了数组,但无论传递给函数initialize的第二个参数是什么,我的大小都是相同的(4字节) #include <stdio.h> #include <stdlib.h> typedef struct stack{ int size; int *tab; int top; } stack; void initialize(stack* st, int sizeArray);
malloc()
指令初始化了数组,但无论传递给函数initialize的第二个参数是什么,我的大小都是相同的(4字节)
#include <stdio.h>
#include <stdlib.h>
typedef struct stack{
int size;
int *tab;
int top;
} stack;
void initialize(stack* st, int sizeArray);
int pop(stack* stack);
void push(stack* stack, int number);
int main(){
int sized;
stack S;
stack* ptr_S = &S;
printf("Enter the size of your stack please: \n");
scanf("%d", &sized);
//We send the pointer of the stack to initialise
initialize(ptr_S, sized);
printf("%d\t%d", S.size, S.top);
//printf("\nThe size of the array is: %d\n", sizeof(S.tab)/sizeof(int));
printf("\nThe size of the array is: %d\n", sizeof(S.tab));
pop(ptr_S);
return 0;
}
void initialize(stack* st, int sizeArray){
st->size = sizeArray;
st->top = 0;
st->tab = (int*)malloc(sizeof(int) * sizeArray);
}
#包括
#包括
typedef结构堆栈{
整数大小;
int*选项卡;
int top;
}堆叠;
无效初始化(堆栈*st,整数大小array);
int-pop(堆栈*堆栈);
无效推送(堆栈*堆栈,整数);
int main(){
内部尺寸;
堆栈S;
堆栈*ptr_S=&S;
printf(“请输入堆栈的大小:\n”);
scanf(“%d”,大小(&S);
//我们发送堆栈指针进行初始化
初始化(ptr_S,大小);
printf(“%d\t%d”,S.size,S.top);
//printf(“\n数组大小为:%d\n”,sizeof(S.tab)/sizeof(int));
printf(“\n数组的大小为:%d\n”,sizeof(S.tab));
流行音乐(ptr_S);
返回0;
}
无效初始化(堆栈*st,整数大小array){
st->size=sizeArray;
st->top=0;
st->tab=(int*)malloc(sizeof(int)*sizeArray);
}
首先,数组不是指针,反之亦然。
在您的代码中,S.tab
是一个指针,在指针上使用sizeof
将根据指针本身的大小而不是分配给该指针的内存量进行计算
在您的平台上,指针(int*
)的大小为4字节,因此您总是看到输出为4字节
如果您有一个正确以null结尾的
char
数组,您可以使用strlen()
来获取字符串元素的长度,但无论如何,这可能不会给出所分配内存的实际大小。你需要自己记录尺寸。通常,您不能期望从指针本身提取信息。首先,数组不是指针,反之亦然。
在您的代码中,S.tab
是一个指针,在指针上使用sizeof
将根据指针本身的大小而不是分配给该指针的内存量进行计算
在您的平台上,指针(int*
)的大小为4字节,因此您总是看到输出为4字节
如果您有一个正确以null结尾的
char
数组,您可以使用strlen()
来获取字符串元素的长度,但无论如何,这可能不会给出所分配内存的实际大小。你需要自己记录尺寸。通常,您不能期望从指针本身提取信息。。数组的大小为sizeof(int)*sized
;它有大小的
元素。数组的大小是sizeof(int)*大小的
;它有大小的元素。感谢您的解释,您现在可以帮助我使用语法来获得好的结果吗?因为我确实同意它是一个指针,但如何使用一元(*)仍然不能解决我的问题。@Frankstifler你说的是哪一个一元*请?strlen
肯定不会给你分配的大小,至少是strlen(…)+1
。对不起,我的英语不是母语。刚刚在strlen()
中被弄糊涂了,它不是针对字符串的吗?。我的程序是要用一个整数数组来模拟整数堆栈。我希望我的用户应该选择堆栈的大小,我在指针int*tab
@frankstifler上分配内存,分配很好,只是不要期望sizeof
会给你大小,它不会。谢谢你的解释,你现在能帮我用语法来获得好的结果吗?因为我确实同意它是一个指针,但如何使用一元(*)仍然不能解决我的问题。@Frankstifler你说的是哪一个一元*请?strlen
肯定不会给你分配的大小,至少是strlen(…)+1
。对不起,我的英语不是母语。刚刚在strlen()
中被弄糊涂了,它不是针对字符串的吗?。我的程序是要用一个整数数组来模拟整数堆栈。我希望我的用户应该选择堆栈的大小,我在指针int*tab
@frankstifler上分配内存,分配很好,只是不要期望sizeof
会给你大小,它不会。这就是全部