c-在结构中将表声明为double*表时出现分段错误



我想将表声明为structre:中的变量

struct func_params{
double *table;
};

当调用我的主程序中的表时

int main(int argc, char **argv){
struct func_params params;
printf("%e n",params.table[0]);
return(0);

}

我得到了一个segmentation fault错误,但如果我将表定义为double table[2500],那也没关系。我想知道为什么我认为C中的表基本上是指针。。。

在取消引用指针之前,必须初始化(分配缓冲区并分配(指针。

通常,未初始化的非静态局部变量(具有自动持续时间(的值是不确定的,使用这些值会调用未定义的行为。因此,即使使用像double table[2500]这样的定义,如果在没有初始化的情况下打印,也找不到它。

#include <stdio.h>
#include <stdlib.h>
struct func_params{
double *table;
};
int main(int argc, char **argv){
struct func_params params;
params.table = malloc(sizeof(*params.table) * 2500); /* initialize pointer (allocate) */
if (params.table == NULL) return 1; /* check if allocation succeeded */
params.table[0] = 42; /* initialize the element to print */
printf("%e n",params.table[0]);
free(params.table); /* deallocate the buffer */
return(0);
}
*params.table // first element.

访问下一个元素

*(params.table + 1) // next element

数组的名称是数组的地址。从逻辑上讲数组的地址和第一个元素的地址是相同的。分配的内存允许您像数组一样使用指针。

array == &array[0] // name of array, same address as 1st array element
*(array) == array[0] //value 1st element
*(array + 1) == array[1] // value 2nd element

最新更新