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