Меню

Array must be initialized with a brace enclosed initializer ошибка

I am getting the following C++ error:

array must be initialized with a brace enclosed initializer 

From this line of C++

int cipher[Array_size][Array_size] = 0;

What is the problem here? What does the error mean? Below is the full code:

string decryption(string todecrypt)
{
    int cipher[Array_size][Array_size] = 0;
    string ciphercode = todecrypt.substr(0,3);
    todecrypt.erase(0,3);
    decodecipher(ciphercode,cipher);
    string decrypted = "";
    while(todecrypt.length()>0)
    {
        string unit_decrypt = todecrypt.substr(0,Array_size);
        todecrypt.erase(0,Array_size);
        int tomultiply[Array_size]=0;
        for(int i = 0; i < Array_size; i++)
        {
            tomultiply[i] = int(unit_encrypt.substr(0,1));
            unit_encrypt.erase(0,1);
        }
        for(int i = 0; i < Array_size; i++)
        {
            int resultchar = 0;
            for(int j = 0; j<Array_size; j++)
            {
                resultchar += tomultiply[j]*cipher[i][j]; 
            }
            decrypted += char((resultchar%229)-26);
        }
    }
    return decrypted;
}

Keith Thompson's user avatar

asked Dec 1, 2010 at 21:27

The syntax to statically initialize an array uses curly braces, like this:

int array[10] = { 0 };

This will zero-initialize the array.

For multi-dimensional arrays, you need nested curly braces, like this:

int cipher[Array_size][Array_size]= { { 0 } };

Note that Array_size must be a compile-time constant for this to work. If Array_size is not known at compile-time, you must use dynamic initialization. (Preferably, an std::vector).

answered Dec 1, 2010 at 21:30

Charles Salvia's user avatar

Charles SalviaCharles Salvia

51.6k12 gold badges127 silver badges140 bronze badges

2

You cannot initialize an array to ‘0’ like that

int cipher[Array_size][Array_size]=0;

You can either initialize all the values in the array as you declare it like this:

// When using different values
int a[3] = {10,20,30};

// When using the same value for all members
int a[3] = {0};

// When using same value for all members in a 2D array
int a[Array_size][Array_size] = { { 0 } };

Or you need to initialize the values after declaration. If you want to initialize all values to 0 for example, you could do something like:

for (int i = 0; i < Array_size; i++ ) {
    a[i] = 0;
}

answered Dec 1, 2010 at 21:34

MahlerFive's user avatar

MahlerFiveMahlerFive

5,1095 gold badges29 silver badges40 bronze badges

1

You can’t initialize arrays like this:

int cipher[Array_size][Array_size]=0;

The syntax for 2D arrays is:

int cipher[Array_size][Array_size]={{0}};

Note the curly braces on the right hand side of the initialization statement.

for 1D arrays:

int tomultiply[Array_size]={0};

answered Dec 1, 2010 at 21:30

Nathan Fellman's user avatar

Nathan FellmanNathan Fellman

120k99 gold badges255 silver badges319 bronze badges

Offline

Зарегистрирован: 05.12.2018

int ppp[] = {1, 2, 3};
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <nRF24L01.h> // библиотека для nRF24L01+
#include <RF24.h>

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime;

const uint64_t pipe = 0xF0F1F2F3F4LL; // идентификатор передачи
RF24 radio(7, 8);
void setup() {
  Serial.begin(9600);
  while (!Serial);   // time to get serial running
  Serial.println(F("BME280 test"));

  unsigned status;

  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  status = bme.begin();
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
    Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(), 16);
    Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085n");
    Serial.print("   ID of 0x56-0x58 represents a BMP 280,n");
    Serial.print("        ID of 0x60 represents a BME 280.n");
    Serial.print("        ID of 0x61 represents a BME 680.n");
    while (1);
  }

  Serial.println("-- Default Test --");
  delayTime = 1000;

  Serial.println();
  radio.begin();       // включаем радио модуль
  radio.setChannel(0); // выбираем канал (от 0 до 127)

  // скорость: RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
  radio.setDataRate(RF24_1MBPS);
  // мощность: RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM
  radio.setPALevel(RF24_PA_HIGH);

  radio.openWritingPipe(pipe);      // открываем трубу на передачу
  radio.stopListening();
}


void loop() {
  int t = bme.readTemperature();
  int ppp[1] = t;
  int data = ppp[];        // читаем значение с датчика
  radio.write(&data, sizeof(data)); // отправляем данные и указываем байты
  Serial.println(data);             // выводим данные на монитор порта
  delay(1000);
}


void printValues() {
  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature());
  Serial.println(" *C");

  Serial.print("Pressure = ");

  Serial.print(bme.readPressure() / 100.0F);
  Serial.println(" hPa");

  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(" m");

  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println(" %");

  Serial.println();
}

ratatyq

3 / 3 / 1

Регистрация: 16.09.2015

Сообщений: 121

1

21.01.2016, 16:56. Показов 18519. Ответов 3

Метки нет (Все метки)


Вот собственно сама ошибка: «array must be initialized with a brace-enclosed initializer»
Сама программа должна выводить квадрат в консоль который нарисован в массиве
Код:
main.cpp

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include "draw.h"
 
using namespace std;
 
int main() {
    Draw d;
    d.draw();
    return 0;
}

draw.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstring>
#include <iostream>
 
using namespace std;
 
class Draw {
private:
    string square[5][5][5][5] {
        {"*","*","*","*","*"},
        {"*"," "," "," ","*"},
        {"*"," "," "," ","*"},
        {"*","*","*","*","*"}
    };
public:
 
    void draw() {
        for(int x = 0; x < 5; x++)
            for(int x2 = 0; x2 < 5; x++)
                for(int x3 = 0; x3 < 5; x3++)
                    for(int x4 = 0; x4< 5; x++)
                        cout << square[x][x2][x3][x4];
    }
};

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

21.01.2016, 16:56

3

Croessmah

Don’t worry, be happy

17777 / 10542 / 2034

Регистрация: 27.09.2012

Сообщений: 26,510

Записей в блоге: 1

21.01.2016, 17:12

2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Draw {
private:
    string square[5][5] {
        {"*","*","*","*","*"},
        {"*","*","*","*","*"},
        {"*","*","*","*","*"},
        {"*","*","*","*","*"}
    };
public:
 
    void draw() {
        for(int x = 0; x < 5; x++){
            for(int x2 = 0; x2 < 5; x2++){
                cout << square[x][x2];
            }
            std::cout << std::endl ;
        }
    }
};



1



3 / 3 / 1

Регистрация: 16.09.2015

Сообщений: 121

21.01.2016, 17:56

 [ТС]

3

Croessmah, Спасибо помогло, вот только не пойму если мы сделали 4-ех значный массив то почему мы указали всего две скобки([][]) заместо четырех([][][][])?



0



0 / 0 / 0

Регистрация: 29.03.2019

Сообщений: 1

30.03.2019, 10:35

4

Массив двухзначный так-то был изначально



0



  • Forum
  • Beginners
  • Array must be initialized with a brace-e

Array must be initialized with a brace-enclosed initializer

Hello everyone,

I have a string «path» that I’m trying to assign to the variable «src». But when I try to do this, I get the error «Array must be initialized with a brace-enclosed initializer». Can someone tell me what I have to do? How can I convert a string into a char* ?

1
2
3
string path;
path="myValue";
char* src[1000]=path;

Best regards
theRunner

First, you declared an array of pointers to chars. You just want an array of chars, so you can get rid of the asterisk. Apart from that, there is no implicit conversion from std::string to char*, though there is the other way round (due to its constructors and assignment operators). Basically, you need to specify that you want to convert the std::string into a char*. For this, the best way (and the most common way) is to use the c_str() member function, which returns the underlying char* from the string:

1
2
3
std::string path;
path = "myValue";
char src[1000] = path.c_str();

Why do you need it as an array of char anyway?

Thanks for your replies.

@NT3:
When I try your solution, there is still the same error message: «Array must be initialized with a brace-enclosed initializer»

@RabMac:
When I try your solution, there is an other error message: «Cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘char*’ in initialization»

I need the string as an array of char because the function I want to call needs an array of char.

It works now. I made:

I don’t know what I just did with this line (copied it from the internet), but it works. To be honest, I don’t have the least idea what I am doing here. 😛
But it seems to work.

Topic archived. No new replies allowed.

3 ответа

Синтаксис статической инициализации массива использует фигурные скобки, например:

int array[10] = { 0 };

Это будет инициализировать нулевой массив.

Для многомерных массивов вам нужны вложенные фигурные скобки, например:

int cipher[Array_size][Array_size]= { { 0 } };

Обратите внимание, что Array_size должна быть константой времени компиляции, чтобы это работало. Если Array_size не известно во время компиляции, вы должны использовать динамическую инициализацию. (Предпочтительно, std::vector).

Charles Salvia
01 дек. 2010, в 21:58

Поделиться

Вы не можете инициализировать массив до ‘0’, как это

int cipher[Array_size][Array_size]=0;

Вы можете либо инициализировать все значения в массиве, как вы его объявляете так:

// When using different values
int a[3] = {10,20,30};

// When using the same value for all members
int a[3] = {0};

// When using same value for all members in a 2D array
int a[Array_size][Array_size] = { { 0 } };

Или вам нужно инициализировать значения после объявления. Если вы хотите, например, инициализировать все значения до 0, вы можете сделать что-то вроде:

for (int i = 0; i < Array_size; i++ ) {
    a[i] = 0;
}

MahlerFive
01 дек. 2010, в 21:41

Поделиться

Вы не можете инициализировать массивы следующим образом:

int cipher[Array_size][Array_size]=0;

Синтаксис для 2D-массивов:

int cipher[Array_size][Array_size]={{0}};

Обратите внимание на фигурные скобки в правой части инструкции инициализации.

для 1D массивов:

int tomultiply[Array_size]={0};

Nathan Fellman
01 дек. 2010, в 21:42

Поделиться

Ещё вопросы

  • 0Не равно условие не работает Symfony2
  • 0Проблемы с Reddit SDK (API)
  • 0C ++ Vector Iterator: сравни и удаляй два элемента
  • 1Конфигурация C # Winchart, добавление дополнительных строк
  • 0Получить данные из внешнего XML-файла, используя PHP
  • 1Свободная вставка больших объемов данных NHibernate
  • 1Пользовательские вкладки в Android
  • 0Не получать почту, отправленную по почте () [дубликаты]
  • 1Использование регулярного выражения для подсчета количества пробелов в начале строки [duplicate]
  • 0Удаление неиспользуемых инструментов командной строки при компиляции mariadb / mysql из исходного кода
  • 1Служба проверки активности Android для запуска другого действия
  • 0MySQL выбрать с условием из нескольких таблиц
  • 0Как скрыть меню? (не «переключаться»)
  • 1python — столбец печати pandas dataframe, если значение = 1
  • 1найти дату выхода приложения в Android
  • 1OSError: [Errno 22] Недопустимый аргумент: ‘ u202aC: /Users/…/Documents/Python/fish.jpg’
  • 0Из многомерного массива я хочу извлечь один столбец
  • 1Поддерживают ли приложения магазина Windows настраиваемые жесты?
  • 1Присоединиться к таблице в проблеме отображения HNibernate
  • 1Современный пользовательский интерфейс, как перейти на другую страницу по другой ссылке
  • 0Изменить Присвоить ID Значение элемента атрибуту данных другого элемента
  • 0ненавязчивая обратная связь при загрузке страницы (onload)
  • 1Есть ли способ заставить инструменты F12 распечатывать, какая функция запускается?
  • 1При объединении Pandas DataFrames разных временных интервалов, Как заполнить NaN постоянными значениями
  • 0Не разрешать браузеру масштабировать текст
  • 1Как отменить длительные, но однопоточные операции
  • 0получить пустую страницу после добавления UI-роутера?
  • 1Как исправить мигание / мигание
  • 1Преобразование в реальный формат JPEG 8bpp
  • 0Рекомендация: Как защитить файлы пользователя в веб-папке?
  • 0C ++ сравнивает векторный итератор с экземпляром [closed]
  • 1Свернуть сетку в WPF
  • 0Как вставить данные в базу данных MySQL, используя laravel
  • 1java.lang.IllegalArgumentException: dataSource или jdbcTemplate требуется при запуске tomcat
  • 1XmlSerialization из списка объектов смешанного типа в c #
  • 0Сортируемый не работает с вкладками
  • 1Время одной итерации асинхронного цикла без глобального состояния
  • 0Сохранение частичных данных с Angularfire
  • 1Javascript If условие с различными переменными и связанными идентификаторами
  • 0Вызов функции myfunction () из одного контроллера в другой в angularjs
  • 1ASP.NET || VsualStudio || Не удалось загрузить файл или сборку? Что я могу сделать?
  • 1Свойства службы Windows
  • 0Angular ng-повторить эту структуру JSON для обмена сообщениями между пользователями
  • 1Метеор введите ключевое событие
  • 0Я хочу, чтобы мои <p> были рядом друг с другом
  • 0yii2 бутстрап выпадающий из модели
  • 0Как мы можем избежать выполнения блока ошибок, даже если в angularjs произошла ошибка на стороне клиента?
  • 1заполнение списка объектов в linq to sql
  • 0ASP.net MVC4 Скрыть исходный код HTML, код Javascript
  • 1Создать категориальный столбец на основе строковых значений
Posted By: user520621

I am getting the following C++ error:

array must be initialized with a brace enclosed initializer 

From this line of C++

int cipher[Array_size][Array_size] = 0;

What is the problem here? What does the error mean? Below is the full code:

string decryption(string todecrypt)
{
    int cipher[Array_size][Array_size] = 0;
    string ciphercode = todecrypt.substr(0,3);
    todecrypt.erase(0,3);
    decodecipher(ciphercode,cipher);
    string decrypted = "";
    while(todecrypt.length()>0)
    {
        string unit_decrypt = todecrypt.substr(0,Array_size);
        todecrypt.erase(0,Array_size);
        int tomultiply[Array_size]=0;
        for(int i = 0; i < Array_size; i++)
        {
            tomultiply[i] = int(unit_encrypt.substr(0,1));
            unit_encrypt.erase(0,1);
        }
        for(int i = 0; i < Array_size; i++)
        {
            int resultchar = 0;
            for(int j = 0; j<Array_size; j++)
            {
                resultchar += tomultiply[j]*cipher[i][j]; 
            }
            decrypted += char((resultchar%229)-26);
        }
    }
    return decrypted;
}

Solution

The syntax to statically initialize an array uses curly braces, like this:

int array[10] = { 0 };

This will zero-initialize the array.

For multi-dimensional arrays, you need nested curly braces, like this:

int cipher[Array_size][Array_size]= { { 0 } };

Note that Array_size must be a compile-time constant for this to work. If Array_size is not known at compile-time, you must use dynamic initialization. (Preferably, an std::vector).

Answered By: Anonymous

Related Articles

  • Java SSLHandshakeException «no cipher suites in common»
  • easiest way to extract Oracle form xml format data
  • Why do I get «Exception; must be caught or declared to be…
  • Java 256-bit AES Password-Based Encryption
  • Initial bytes incorrect after Java AES/CBC decryption
  • How to fix Invalid AES key length?
  • How do I use 3DES encryption/decryption in Java?
  • How to encrypt/decrypt data in php?
  • Java AES and using my own Key
  • Password encryption/decryption code in .NET

Disclaimer: This content is shared under creative common license cc-by-sa 3.0. It is generated from StackExchange Website Network.


Форум программистов Vingrad

Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> масив указателей, ошибка при инициализации масив указателе 

:(

   

Опции темы

grisWall
Дата 29.4.2013, 03:00 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 18
Регистрация: 28.4.2013

Репутация: нет
Всего: нет

Всем доброго времени суток у меня проблема не могу в С++ инициализировать массив указателей т.е. могу, но вот именно этим способом не получается, кто подскажет что я делаю не так и вообще возможно ли такое:

Код

// test.cpp
#include <iostream>

using namespace std;

int main(void){
char *str[] = "Hello world!";

cout << *str << endl;

return 0;

в консоли ввожу:
$ g++ test.cpp -o test

на выводе ошибка
test.cpp: В функции «int main()»:
test.cpp:7:16: ошибка: array must be initialized with a brace-enclosed initializer
  char *str[] = «Hello world!»;
                ^

Код

// test.cpp
#include <iosteam>

using namespace std;

char *str [] = {"Hello world!"};

int main(void){
cout << *str << endl;
return 0;
}

ввожу:

$ g++ test.cpp -o test

выдает:

test.cpp:6:30: предупреждение: deprecated conversion from string constant to «char*» [-Wwrite-strings]
 char *str[] = {«Hello world!»};
                              ^

Код

// test.cpp
#include <iosteam>

using namespace std;

int main(void){
static char *str [] = {"Hello world!"};
cout << *str << endl;
return 0;
}

ввожу: 

$ g++ test.cpp -o test

выдает:

test.cpp: В функции «int main()»:
test.cpp:7:38: предупреждение: deprecated conversion from string constant to «char*» [-Wwrite-strings]
  static char *str[] = {«Hello world!»};
                                      ^

везде в примерах видел и в книгах и на форуме что такое возможно, а у меня не получается 

может кто сталкивался с таким или знает как это решается у меня система Archlinux недавно делал update совсем на днях почти

у меня еще много чего не понятного в С++ встречается что например в Си работает и связанно это с указателями и переменными а так же массивами, просто дальше я еще не продвинулся так сказать изучаю поступательно по мере понимания, владения; то чего не знаю пытаюсь изучить, но если даже это не работает, что уж говорить о перегрузке и классах там я вообще захлебнусь мне кажется…или потеряюсь где нибудь так что вообще не выберусь…. страшновато становится..

Код

//test.c
#include <stdio.h>

int main(void){
static char *str[] = {"Hello world!"};
printf("%sn",*str);
return 0;
}

$ gcc test.c -o test
$ ./test 
Hello world!
————————————
Нормально работает

Код

// test.cpp
#include <stdio.h>

int main(void){
static char *str[] = {"Hello world!"};
printf("%sn",*str);
return 0;
}

Ввожу:

$ gcc test.cpp -o test

на выходе:

test.cpp: В функции «int main()»:
test.cpp:5:38: предупреждение: deprecated conversion from string constant to «char*» [-Wwrite-strings]
  static char *str[] = {«Hello world!»};
                                      ^
///// И снова предупреждение….

Если кто ответит заранее благодарю за помощь…

PM MAIL   Вверх
math64
Дата 29.4.2013, 07:18 (ссылка)
|    (голосов:1)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72

строка в кавычках — это const char*. Следовательно,

Код

static const char* str[] = { "Hello World!"};

или, если нужно без const:

Код

static char[] helloWorld = "Hello World!";
static char* str[] = { helloWorld };

static в зависимости от использования можно не писать.

PM   Вверх
NoviceF
Дата 29.4.2013, 13:39 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2

Цитата(grisWall @  29.4.2013,  04:00 Найти цитируемый пост)
инициализировать массив указателей

ну и так, на всякий случай, ты же видишь, что у данного массива получает только 1 элемент, то есть, если нужно сделать массив из нескольких указателей указывающих на строки, должно быть что-то типа

Код

static const char* str[] = { "Hello World!", "qwert", "asdf" };

PM MAIL   Вверх
grisWall
Дата 29.4.2013, 23:13 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 18
Регистрация: 28.4.2013

Репутация: нет
Всего: нет

а еще смежный вопрос такой

Код

char ** month(const char * mas[]){
*mas = 
"Hello", "world", "!", "my darling", 
"Привет мир!", "мой дорогой"
;
return (char**) mas;
}
char ** month(const char **);
int main(void){
char ** m;
const char* value[] = {"Hello my darling"};
m = month(value); int i=1;
//for( ; *m; i++)
std :: cout << *(m+i) << std :: endl; 
return 0;
}

все компилирует вроде бы но при вызове

Код

int i=1;
std :: cout << *(m+i) << std :: endl;

 

выдает ошибку сегментирования

PM MAIL   Вверх
volatile
Дата 29.4.2013, 23:30 (ссылка)
|    (голосов:1)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85

Цитата(grisWall @  29.4.2013,  23:13 Найти цитируемый пост)
все компилирует вроде бы 

grisWall, вы меня извините конечно, но вам нужно читать учебник для самых начинающих.
ваш код это — бред.
ошибок и бессмыслиц больше чем операторов.

PM MAIL   Вверх
grisWall
Дата 29.4.2013, 23:35 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 18
Регистрация: 28.4.2013

Репутация: нет
Всего: нет

пусть плохой пример никчемный, но мне понять саму семантику указателей, как они работают через такие вот ошибки а вообще в Си / С++ можно ли передавать массив из функции 

Код

int ** f(){
int * mas[] = {1,2,40,21}; 
return mas;
}

а потом в main обращаться к нему

Код

int main(){
int **n = f();
std :: cout << n[0] << n[1] << n[2] << std :: endl;
}

или такое возбраняется 

может из-за этого у меня ошибка сегментации?

Добавлено @ 23:44

Цитата(volatile @  29.4.2013,  23:30 Найти цитируемый пост)
grisWall, вы меня извините конечно, но вам нужно читать учебник для самых начинающих.
ваш код это — бред.
ошибок и бессмыслиц больше чем операторов.

а какой учебник вы посоветуете? 

я читал у меня два один для чайников С++ за 21 день, а другой С/С++ программироние на языке высокого уровня Т.А.Павловской

там таких подробностей не описано про указатели там написано как они работают в общих чертах а я пишу не в общих чертах а так как мне нужно чтоб это работало или конечно я смотрю и пограничные случаи что бы знать куда можно идти а куда нельзя….если можете что посоветовать с удовольствием выслушаю ( т.е. сочту)…

Это сообщение отредактировал(а) grisWall — 29.4.2013, 23:51

PM MAIL   Вверх
volatile
Дата 29.4.2013, 23:54 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85

Цитата(grisWall @  29.4.2013,  23:35 Найти цитируемый пост)
можно ли передавать массив из функции 

сам массив вообще нельзя ни передать, ни вернуть.
можно вернуть указатель, но только если это не стековый объект.

Цитата(grisWall @  29.4.2013,  23:35 Найти цитируемый пост)
int ** f(){
int * mas[] = {1,2,40,21}; 
return mas;
}

так делать нельзя.
У вас массив создаецца в стеке.
После возврата из функции, стек будет уничтожен (заполнен чем-то другим и т.д.)
И указатель будет указывать на неизвестно что.

int * mas[] = {1,2,40,21};  // а это, кстати, вообще не имеет смысла. массив указателей на инт, вы заполняете не указателями на инт, а неизвестно чем.

grisWall, вам нужно для начала понять что такое массив, что такое указатель, и что такое инт.
учебник — да в любом пожалуй это есть. (здесь есть прикрепленная тема по этому поводу).
просто нужно понять сначала элементарные вещи.

PM MAIL   Вверх
grisWall
Дата 30.4.2013, 01:56 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 18
Регистрация: 28.4.2013

Репутация: нет
Всего: нет

Цитата(volatile @  29.4.2013,  23:54 Найти цитируемый пост)
int * mas[] = {1,2,40,21};  // а это, кстати, вообще не имеет смысла. массив указателей на инт, вы заполняете не указателями на инт, а неизвестно чем.

да спасибо за совет я откомпилировал и увидел что вместо int* я занес int в int *mas[] теперь я понял и так делать не буду в учебниках этого не пишут там не пишут чего нельзя делать там лишь только то что можно а чего нельзя понимаешь из примеров но порой не достаточно откомпилировать нужно чтоб еще кто-то тебе сказал что это не получается поэтому а это потому что так-то так-то и так-то  и тогда появляется знание, когда наделаешь кучу ошибок, 
извините что я так многословен просто это выражение моей точки зрения по поводу того что  мне надо почитать учебники я читал но там не сказано того что мне сказали здесь то что

 строка в кавычках это const char* например

я этого не знал теперь буду знать,
а в Си например

Код

char * str[] = {"Hello", "How are you", "Привет мир!"}

работает, а в С++ нет! надо выражение в скобках обязательно в const char* заносить

volatile, а как же мне в int * mas[] занести данные не подскажите?

Это сообщение отредактировал(а) grisWall — 30.4.2013, 02:07

PM MAIL   Вверх
math64
Дата 30.4.2013, 07:14 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72

Аналогично, как я вам показывал для строк:

Код

static int i123[] = {1,2,3}, i456[] = {4,5,6}, i789[]={7,8,9};
static int* mas[] = {i123, i456, i789};

static чтобы переменные создавались не на стеке.

Если нужно запонять не фиксированными значениями, нужно выделять память по new:

Код

int* mas[] = { new int[3], new int[3], new int[3]};
mas[0][0] = 1;
...
mas[2][2] = 9;
...
for (int i=0; i < 3; i++)
  delete[] mas[i];

Это сообщение отредактировал(а) math64 — 30.4.2013, 07:15

PM   Вверх
grisWall
Дата 30.4.2013, 11:58 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 18
Регистрация: 28.4.2013

Репутация: нет
Всего: нет

math64, спасибо теперь я понял

PM MAIL   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «C/C++: Для новичков»
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь

  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Array initializer expected java ошибка
  • Ariston avsf 129 ошибка f 12