#include <stdio.h>
#include <stdlib.h>
int foo(int **asciiSum);
int main(void)
{
int asciiSum;
asciiSum = 0;
int* pointToAsciiSum;
*pointToAsciiSum = &asciiSum;
printf("%d\n",*pointToAsciiSum); //prints 0
foo(pointToAsciiSum)
printf("%d\n",*pointToAsciiSum); //prints 2
return 0;
}
int foo(int** asciiSum)
{
*asciiSum = 2;
return 0;
}
Как я могу избавиться от предупреждений?Передача указателей в c
Предупреждения:
предупреждение C4047: 'функция': 'INT ** отличается уровнями косвенности от 'междунар *' // происходит при вызове Foo
предупреждение C4024: 'Foo': разные типы для формального и фактического параметра 1 // происходит при вызове foo
предупреждение C4047: '=': 'int *' отличается в уровнях косвенности от 'int' // встречается в foo при присвоении 2 * asciiSum
Неопределенное поведение для использования значения объекта с автоматической продолжительности хранения в то время как он является неопределенным. – EOF
@EOF Ваши объяснения не применяются. – BLUEPIXY
@BLUEPIXY Черт его нет: 'int * pointToAsciiSum; * pointToAsciiSum = & asciiSum; 'использует указатель (который является объектом с автоматической продолжительностью хранения), пока он неопределен. Подумайте, если это так, это также является нарушением ограничения, которое вызывает вопрос, где соответствующее предупреждение компилятора. – EOF