指针指向不同的数据类型

时间:2018-10-17 14:10:34

标签: c arrays pointers

我读到如果使用指针,则数据类型必须相同。但是我已经测试了这段代码,并且没有错误。我认为那里会有错误。但是什么也没发生。该程序按应有的方式工作。为什么我们可以解释这个?

代码:

#include<stdio.h>

int main(){
float i, j, k, l;
int *c1, *c2, c[1];

printf("Enter i : ");
scanf("%f", &i);
printf("Enter j : ");
scanf("%f", &j);
printf("Enter k : ");
scanf("%f", &k);
printf("Enter l : ");
scanf("%f", &l);

c1 = &c[0];
*c1 = i+k;
c2 = &c[1];
*c2 = j+l;
printf("\nMatrice c is [%d ; %d]\n", *c1, *c2);

return 0;

}

输出:

Enter i : 1
Enter j : 2
Enter k : 3
Enter l : 4

Matrice c is [4 ; 6]

Process returned 0 (0x0)   execution time : 1.447 s
Press any key to continue.

我已经编辑了这段代码

printf("\nMatrice c is [%d ; %d]\n", *c1, *c2);

成为

printf("\nMatrice c is [%f ; %f]\n", *c1, *c2);

输出错误。

Enter i : 1
Enter j : 2
Enter k : 3
Enter l : 4

Matrice c is [0.000000 ; 42581666233418238000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000]

Process returned 0 (0x0)   execution time : 1.164 s
Press any key to continue.

1 个答案:

答案 0 :(得分:1)

int* c1;    //pointer to int
int c[1];   //int array with one element
c1 = &c[0]; // c1 points to the the first and only element of the array.

c[0] = 5;   // the first element of the array c is 5
*c1 = 5;    // The element to which the pointer is pointing is 5 (dereferencing)

在您的代码中,问题在于数组大小不足。 没有元素c[1],因此行为是不确定的。

这通常导致segmentation fault出现,但您倒霉。

将数组c声明为int c[2];

还要注意[]运算符的作用。
如果定义一个变量,它将显示该数组将容纳多少元素-应该分配多少内存。

表达式array[N]*(array + N)相同