我有一個函數打印字符數組的內容:是否將char *轉換爲int * undefined?
#include <stdio.h>
void print_array(char * array, int n) {
char* start;
for(start = array; start - array < n && printf("%d\n", *start); start++);
}
int main() {
char array[5] = {'a', 'b', 'c', 'd', 'e' };
print_array(array, 5);
return 0;
}
這個工程很好地進行打印:
void print_array(int * array, int n) {
int* start;
for(start = array; start - array < n && printf("%d\n", *start); start++);
}
:如果我改變功能這一
97
98
99
100
101
麻煩的開始
然後調用如下函數:
print_array((int*)array, 5);
這會打印垃圾。
1684234849
101
1973473280
8388443
80884992
編譯時我打開了-Wall
,它沒有引發警告。爲什麼當我改變指針時我會變得垃圾?
是的,它是未定義的。其他問題?請注意,您還在界限之外打印以及其他所有類似內容。 –
@AnttiHaapala是的。爲什麼沒有 - 會發出警告? –
這是C.這是設計讓你自己在腳下射擊的語言。在這裏,你故意將槍指向你的腳並拉動扳機,所以編譯器會假設你知道你在做什麼。 –