C 未使用指针正确初始化数组
我试图使用指针和C 未使用指针正确初始化数组,c,arrays,pointers,C,Arrays,Pointers,我试图使用指针和malloc()函数创建一个数组,然后通过for循环初始化它,但是并不是所有的值都被初始化,有些值似乎以不同的方式处理,我不理解。 在第一个版本中,我编写了不带强制转换的for循环,这导致了警告:使用-Wall-Wextra编译时比较有符号和无符号整数表达式,并且在执行时给出了相同的结果 #include <stdio.h> #include <stdlib.h> #define N 50 #define SIZE sizeof(int) void af
malloc()
函数创建一个数组,然后通过for
循环初始化它,但是并不是所有的值都被初始化,有些值似乎以不同的方式处理,我不理解。
在第一个版本中,我编写了不带强制转换的for
循环,这导致了警告:使用-Wall-Wextra
编译时比较有符号和无符号整数表达式,并且在执行时给出了相同的结果
#include <stdio.h>
#include <stdlib.h>
#define N 50
#define SIZE sizeof(int)
void afficher (int *p) /* just to display the values of the array*/
{
int i;
for (i=0; i<=(int) ((N-1)*SIZE); i+=SIZE)
{
printf("%d ", *(p+i));
}
printf("\n\n");
}
int main()
{
int * pointer = NULL;
int i;
pointer = malloc (N*SIZE);
afficher(pointer); /*first display before initialising*/
if (pointer)
{
for (i=0; i<=(int)((N-1)*SIZE); i+=SIZE)
{
*(pointer+i) = 1; /*trying to initialise all values to 1 */
}
}
afficher(pointer); /*second display*/
free(pointer);
return 0;
}
尽管第一个显示有点奇怪,但我不认为当我试图改变这些值时会引起一个问题,我不知道为什么中间的这些值不会像其他的那样变为1。 < P>你不能访问未初始化的对象。code>malloc
不会初始化已分配数组的值,因此无法打印它们。这样做会导致未定义的行为
其次,您有N
元素,因此需要
for (i = 0; i < N; ++i)
(i=0;i
当遍历数组时,在
malloc
和N
中需要N*sizeof(int)
的原因是malloc是数据类型不可知的,并且处理内存字节,但是变量指针具有数据类型int*
,因此它知道它的元素是int
这是否意味着(int大小为4)for
循环的中的指针从其基本值跳转到相同的值+16、+32..,而不是值+4、+8..,这是因为程序自动将*(p+i)替换为*(p+i*4)?@Guil23是的。对于数组,不要以字节为单位,而要以元素为单位!我实际上是在想,如果使用指针,我将不得不处理字节而不是元素,我不知道它们会被视为数组。非常感谢
for (i = 0; i < N; ++i)