Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 我能';我不明白为什么我的数组大小不对_C_Arrays_Pointers_Sizeof - Fatal编程技术网

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);

我对这个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);
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
会给你大小,它不会。这就是全部