Принимая более простую версию кода следующим образом:
#include <stdio.h>
void main()
{
int a[]={1,2,3,4};
printf("%d %d ", *a ,*&a); //b
}
Если я скомпилировать этот код я получаю это предупреждение:
test1.c
D:\Temp\test1.c(7): warning C4477:
'printf' : format string '%d' requires an argument of type 'int', but variadic
argument 2 has type 'int *'
Microsoft (R) Incremental Linker Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.
Это предупреждающее сообщение дает вам причину, почему это не работает как вы ожидаете.
Теперь я могу изменить этот код, чтобы удалить эти предупреждения, и я в конечном итоге с кодом, как это:
#include <stdio.h>
void main()
{
int a[]={1,2,3,4};
int (*p)[4] = &a;
printf("\n%u %u ", *a ,*p[0]); //b
}
Этот код чистые компилирует и при запуске вы получите ожидаемый результат:
1 1
Читать раздел 6 из [comp.lang.c] (http://www.c-faq.com/). И 'void main()' должен быть 'int main (void)'. И вам не хватает '#include'. –
Использование '% u' в' printf' для печати значений указателя - неопределенное поведение (и это может легко привести к бессмысленным результатам на практике). Для указателей печати есть '% p'. И вы должны преобразовать указатели в 'void *' перед отправкой их в 'printf'. – AnT