Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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

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 - Fatal编程技术网

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)