Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/121: Рейтинг темы: голосов - 121, средняя оценка - 4.64
0 / 0 / 1
Регистрация: 13.11.2013
Сообщений: 84
1

Присвоение значений массиву: Subscripted value is neither array nor pointer nor vector

14.05.2015, 05:16. Показов 24604. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть 2 массива:

C
1
2
3
4
5
6
7
8
9
10
11
12
int **tmp3;
  tmp3 =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        tmp3[i]=(int*)malloc(sizeof(int)*m);
    }
 
   a =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        a[i]=(int*)malloc(sizeof(int)*m);
    }
При попытке присвоить значение
C
1
tmp3[i][j]=a[i][j]
Выскакивает ошибка:subscripted value is neither array nor pointer nor vector. Как исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2015, 05:16
Ответы с готовыми решениями:

Subscripted value is neither array nor pointer nor vector
Здравствуйте! Я задумал, для тренировки, написать собственную функцию на Си, отыскивающую...

Ошибка компиляции "Subscripted value is neither array nor pointer nor vector"
Может кто-нибудь может привести минимальный код, который компилировался бы со следующей ошибкой: ...

Ошибка: subscripted value is neither array nor pointer
ввожу: scanf(&quot;%d&quot; &amp; min); даёт ошибку: subscripted value is neither array nor pointer .

Присвоение значений двумерному массиву
Столкнулся с такой незадачей: при попытке заполнить двумерный массив значениями (константами)...

9
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
14.05.2015, 08:25 2
Переменная а как объявлена?
0
0 / 0 / 1
Регистрация: 13.11.2013
Сообщений: 84
14.05.2015, 10:06  [ТС] 3
Как
C
1
int a**
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
14.05.2015, 10:30 4
XChr, в смысле
C
1
int **a;
?
0
0 / 0 / 1
Регистрация: 13.11.2013
Сообщений: 84
14.05.2015, 10:35  [ТС] 5
Да, так. Т.е. всё вместе выглядит вот так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int **a;
int **tmp3;
a =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        a[i]=(int*)malloc(sizeof(int)*m);
    }
 
int **tmp3;
  tmp3 =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        tmp3[i]=(int*)malloc(sizeof(int)*1);
    }
 
 for (i=0; i<n; i++) // Заполнение массива a
        {
            for (j=0; j<m; j++)
            {
                a[i][j]=(-50+rand()%100);
            }
        }
       
for (i=0;i<n;i++)
       tmp3[i][0]=a[i][0];
И при попытке присвоения какого-либо элемента tmp3[i][0] к a[i][0] выходит сообщение об ошибке
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
14.05.2015, 11:29 6
У меня приведенный вами код компилится и отрабатывает нормально (если убрать строку 9).

Добавлено через 28 секунд
З.Ы. ну и добавить там i,j,m,n
0
0 / 0 / 1
Регистрация: 13.11.2013
Сообщений: 84
14.05.2015, 11:54  [ТС] 7
Значит, дело в стройке
C
1
printf ("\nЮ:%d",tmp[i][1]);
, которая находится в цикле
C
1
for (i=0;i<n;i++) {  tmp3[i][0]=a[i][0]; printf ("\nЮ:%d",tmp[i][1]); }
Я просто даже не подозревал, что дело в ней, и поэтому не стал копировать в код
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
14.05.2015, 12:02 8
И кто у нас tmp?
0
0 / 0 / 1
Регистрация: 13.11.2013
Сообщений: 84
14.05.2015, 13:59  [ТС] 9
Вот где оказывается ошибка была, спасибо) Но теперь программа вылетает при попытке печати
Залью сюда весь код программы:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
 
int main()
{
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    printf ("\n Характеристикой столбца целочисленной матрицы назовем сумму модулей его\n отрицательных нечётных элементов. Переставляя столбцы заданной \n матрицы, расположить их в соответствии с ростом характеристик.\n\n");
    int **a;
    int i, j, f, n, m;
    printf("\n\t Введите количество строк: ");
    scanf("%d", &n);
    printf("\n\t Введите количество столбцов: ");
    scanf("%d", &m);
    int sumk[m],por[m];
    for (i=0; i<m; i++)
    {
        sumk[i]=0;
        por[i]=i;
        printf ("%d",por[i]);
    }
 
    a =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        a[i]=(int*)malloc(sizeof(int)*m);
    }
 
 
    printf ("\n\t Введите 1, чтобы самостоятельно заполнить матрицу.\n");
    printf ("\n\t Введите 0, чтобы заполнить матрицу случайными числами.\n ");
 
    scanf ("%d",&f);
 
    if (f==1) // Заполнение матрицы в ручную
    {
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
            {
                printf("\nЭлемент [%d][%d] = ", i+1, j+1);
                scanf("%d", *(a+i)+j);
            }
        }
    }
    if (f==0) // Хаполнение матрицы рандомными числами
    {
 
        for (i=0; i<n; i++)
        {
            for (j=0; j<m; j++)
            {
                a[i][j]=(-50+rand()%100);
            }
        }
    }
 
    printf ("\n Составленная матрица: \n\n");
    for (i = 0; i < n; i ++)
    {
        for (j = 0; j < m; j ++)
        {
            printf("%4d", *(*(a+i)+j) );
        }
        printf("\n");
    }
 
// Суммирование абсолюьютных значений нечётный отрицательных чисел по столбцам
    j=0;
    while (j<m)
    {
        for (i=0; i<n; i++)
        {
            if (a[i][j]<0 && a[i][j]%2!=0) sumk[j]=sumk[j]+abs(a[i][j]);
        }
        j++;
    }
 
    for (i=0; i<m; i++) printf ("\n sumk[%d]=%d",i,sumk[i]);
 
// Сортировка массива индексов и массива сумм по возрастанию
 
 
    int tmp,tmp2;
    for (i=0; i<m-1; i++)
    {
        for (j=i+1; j<m; j++)
        {
            if (sumk[i]>sumk[j])
            {
                tmp=sumk[i];
                tmp2=por[i];
                sumk[i]=sumk[j];
                por[i]=por[j];
                sumk[j]=tmp;
                por[j]=tmp2;
            }
        }
    }
 
for (i=0;i<m;i++) printf ("\n%d и %d",sumk[i],por[i]);
 
int **tmp3;
  tmp3 =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        tmp3[i]=(int*)malloc(sizeof(int)*n);
    }
 
 for (i=0;i<n;i++)
       tmp3[i][0]=a[i][0];
        printf ("\n:%d",tmp3[i][0]);
 
 
    return 0;
}
0
18834 / 9836 / 2405
Регистрация: 30.01.2014
Сообщений: 17,273
14.05.2015, 14:51 10
XChr, цикл в 113 строке. Скобки нужны ему. Следующая за циклом операция выполняется в теле цикла, а вот printf уже вне его.
C
1
2
3
4
5
    for (i = 0; i < n; i++)
    {
        tmp3[i][0] = a[i][0];
        printf ("\n:%d", tmp3[i][0]);
    }
1
14.05.2015, 14:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2015, 14:51
Помогаю со студенческими работами здесь

Присвоение значений двумерному массиву
Есть текстовый файл, в нем поле для игры 12х12. Читаю нужные строки File.ReadAllLines, создаю...

Присвоение значений многомерному массиву
Здравствуйте. Подскажите пожалуйста, как организовать присвоение многомерному массиву значений. ...

Присвоение значений всему массиву
Друзья, подскажите, пожалуйста. Есть в Delphi оператор или команда, с помощью которой можно...

Присвоение массиву значений stringgrid
Не могу присвоить, выдает ошибку, подскажите , что исправитьprocedure TForm1.Button2Click(Sender:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru