Tag: 数组

数组元素值的C数组设置超出数组大小

我有这个C代码片段 int numbers[4]={1}; numbers[0]=1; numbers[1]=2; numbers[3]=3; numbers[10]=4; printf(“numbers: %d %d %d %d %d %d\n”,numbers[0],numbers[1],numbers[3],numbers[6],numbers[10], numbers[5]) ; 此代码段的输出产生: numbers: 1 2 3 963180397 4 0 好吧,我有几个问题 不设置数字[10]给出错误,因为数组只是大小4,如果不是那么为什么(因为它没有给出任何错误) 为什么打印数字[6]给出了垃圾值,而数字[5]给出的值为0? 它不应该是垃圾价值。 设置数字[10]有什么影响我知道它不会增加数组的大小但它会做什么呢? 提前致谢 。 PS我用GCC编译代码!!

Malloc在C中的二维数组

每次我为2D数组分配内存时,我首先创建一个int**数组,然后使用for我为每个元素分配内存。 例如: int ** arr = malloc(N*sizeof(int *)); for(i=0; i< N; i++) arr[i] = malloc(M*sizeof(int)); 不可能像以下那样分配内存: int ** arr = malloc(N*sizeof(int[M])); 要么 int ** arr = malloc(sizeof(int[N][M])); 为了避免for ?

是否有一种类型安全的方法来获取C中数组的元素数?

在C中获取数组元素的通常方法是这样的: #define COUNTOF(arr) (sizeof(arr) / sizeof(arr[0])) 这导致了一个整数常量表达式,这也是一个非常好的加号。 问题是它不是类型安全的: int* i; COUNTOF(i); /* compiles 🙁 */ int* i; COUNTOF(i); /* compiles 🙁 */ int* i; COUNTOF(i); /* compiles 🙁 */ 。在实践中,这应该很少出现,但为了正确起见,这将是很好的使这种类型安全。 在C ++ 03中,这很容易(在C ++ 11中,它更容易,留给读者练习): template char (&countof_detail(T (&)[N]))[N]; // not defined #define COUNTOF(arr) (sizeof(countof_detail(arr))) 这使用模板推导来获得N ,即数组的大小,然后将其编码为类型的大小。 但在C语言中,我们没有获得该语言function。 这是我做的小框架: // if `condition` evaluates to 0, […]

如何从C中的函数返回字符数组?

甚至可能吗? 假设我想返回一个包含两个字符的数组 char arr[2]; arr[0] = ‘c’; arr[1] = ‘a’; 来自一个function。 我甚至用什么类型的function? 我唯一的选择是使用指针并使函数无效吗? 到目前为止,我已经尝试过使用char *函数或char []。 显然你只能有char(* [])的function。 我想避免使用指针的唯一原因是函数必须在遇到“返回内容”时结束。 因为“something”的值是一个字符数组(不是字符串!),它可能会根据我通过main函数传递给函数的值来改变大小。 感谢提前回复的任何人。

如何在C / C ++中获取多维数组的列?

int matrix[9][9],*p; p=matrix[0]; 这工作并给出第一行matrix ,但如何得到matrix第一列我试过p=matrix[][0]; ? 另外我不明白为什么下面的代码会出现编译错误? int matrix[9][9],p[9]; // it looks really ugly, byt why it doesn’t work ? p=matrix[0]; // compiler gives “invalid array assigment” 是因为多维数组是数组的数组 – 我们应该将matrix[i][j]为第i个嵌套数组的第j个元素?

char数组不可赋值

好的,所以我想在char数组中保存一个单词,但它给了我一个错误 这是我的代码 #include #include #include #include int main(void) { char yesno[30] = “n”; //yes/no answer char class[30] = “undefined”;//choosen class int classchoosen = 0; /* initialize random seed: */ srand ( time(NULL) ); printf(“Welcome, which class do you wanna play with? \n”); printf(“Type W for Warrior, M for Mage or R for Ranger. Then press […]

访问超出内存后,分段错误不会立即出现

我编写了这段代码并且期待一个段落故障,但似乎我被允许访问我不应该访问的内存块。 #include int main() { int tab[1]; tab[0]=42; int i; //Expecting Seg Fault from i==1… for(i=0;;i++) { printf(“%d \t %d \n”, i, tab[i]); } return 0; } 我正在编译使用: gcc -Wall -Wextra my_code.c -o segfault && ./segfault 执行后,变量i在得到分段错误之前达到1000的值。 我的问题是:为什么我能够阅读tab到目前为止? PS:使用#include 并声明int * tab = (int*)malloc(sizeof(int)); 什么都不改变…… 谢谢,最好的。

将指针的2D数组传递给函数C.

我有一个2D数组指针 main.c Int32 * pRxSeqAddr[2][2]; func(pRxSeqAddr); / func.c void func( Int32** pRxSeqAddrPtr) { /// } 我收到此错误: argument of type “Int32 *(*)[2]” is incompatible with parameter of type “Int32 ** 我知道如果它是指针的1D数组那么这个函数调用很好,但是2D唠叨我… 请帮忙

array 括号内的static关键字

我最近遇到了static关键字的新用法。 static意味着什么? void fun(int some_array[static 7]); 编辑 :有人可以举例说明这有用吗?

将数组从C / C ++传递给Fortran并返回计算出的数组

我试图将数组从C / C ++传递到Fortran 2003模块,并将计算值返回到C / C ++。 我已经能够传递并返回单个值(标量),但是来回获取数组很难。 我在标量值上发现了许多线索,并且我已经成功地完成了这些工作。 在我的工作标量函数之后,我已经建模了基于数组的函数。 我正在使用gcc / gfortran。 这是Fortran模块(ConvertUnitsLib.f03)。 module ConvertUnitsLib use :: iso_c_binding ! for C/C++ interop real(c_double), bind(c) :: degF, degC public DegCtoF contains ! ! Convert temperature degrees Celsius Fahrenheit ! real(kind = c_double) function DegCtoF(degC) result(degF) & & bind(c, name = “DegCtoF”) real(c_double), intent(in), dimension(:) […]