Запутаться с доступом к массиву - PullRequest
0 голосов
/ 29 апреля 2019

В следующем массиве:

float mat[2][2] = {{4.0, 3.0}, {2.0, 1.0}}; 

Я не уверен, каков тип и значение следующих выражений:

"*mat"
"mat[0]"
"**mat"
"**(mat+1)"

Когда я пытаюсь запустить его,он всегда выводит адреса.Я немного растерялся, потому что не знаю, правильно ли это.

1 Ответ

1 голос
/ 29 апреля 2019

У вас есть двумерный массив mat.

*mat и mat[0] одинаковы, они (указатель на) первый 1D массив {4.0, 3.0}.
mat[1] будет указателем на второй одномерный массив.

**mat - это первое значение первого 1D массива: 4.0.

*(mat + 1) - это mat[1], второй 1D массив, поэтому **(mat + 1) - это первое значение второго 1D массива: 2.0.

#include <stdio.h>

int main(void) {
    float mat[2][2] = {{4.0, 3.0}, {2.0, 1.0}}; 
    printf("%p\n", (void*)*mat);
    printf("%p\n", (void*)mat[0]);
    printf("%f\n", **mat);
    printf("%f\n", **(mat+1));
    return 0;
}

напечатает

0x7ffc9cc9e290
0x7ffc9cc9e290
4.000000
2.000000

первые 2 значения являются адресом массива, значения могут быть разными для вас, но они должны быть равны.

https://ideone.com/xEuxgg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...