Инициализация указателя на массив
От: lsv  
Дата: 23.03.04 08:17
Оценка:
Пример: char *aaa = "bbb";
В этом случае переменная ааа будет содержать указатель на строку "bbb".
Как тоже самое проделать с массивом чисел?
Есть массив: 1,2,3,4 и переменная int *bbb, как вот ей присвоить указатель на этот массив?
Re: Инициализация указателя на массив
От: LaptevVV Россия  
Дата: 23.03.04 08:22
Оценка:
Здравствуйте, lsv, Вы писали:

lsv>Пример: char *aaa = "bbb";

lsv>В этом случае переменная ааа будет содержать указатель на строку "bbb".
lsv>Как тоже самое проделать с массивом чисел?
lsv>Есть массив: 1,2,3,4 и переменная int *bbb, как вот ей присвоить указатель на этот массив?
1. Имя массива и есть указатель.
2.

int a[4] = {1,2,3,4};
int *b1 = a;       //1
int *b2 = &a[0];   //2
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Инициализация указателя на массив
От: Vamp Россия  
Дата: 23.03.04 08:22
Оценка:
Если я правильно понял, то например, так:

int barr[]={1, 2, 3, 4};
int* bbb=&barr[0];


lsv>... указатель на этот массив?

А вообще-то, указатель на массив — это &barr. Но подозреваю, он тебе не нужен.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Инициализация указателя на массив
От: Vamp Россия  
Дата: 23.03.04 08:23
Оценка: +2
Лаптев! Не путайте товарища!
LVV>1. Имя массива и есть указатель.
ИМЯ МАССИВА НЕ ЕСТЬ УКАЗАТЕЛЬ.
Да здравствует мыло душистое и веревка пушистая.
Re: Инициализация указателя на массив
От: Анатолий Широков СССР  
Дата: 23.03.04 08:25
Оценка:
int bbb[] = {1, 2, 3, 4};

// обход элементов
for(size_t i = 0; i < sizeof(bbb)/sizeof(bbb[0]); i++)
{
    int test = bbb[i];
}
Re[2]: Инициализация указателя на массив
От: Анатолий Широков СССР  
Дата: 23.03.04 08:28
Оценка:
LVV>1. Имя массива и есть указатель.

Массив приводится к указателю на первый элемент, но это суть две разные сущности.
Re: Инициализация указателя на массив
От: dupamid Россия  
Дата: 23.03.04 08:29
Оценка:
Здравствуйте, lsv, Вы писали:

lsv>Пример: char *aaa = "bbb";

lsv>В этом случае переменная ааа будет содержать указатель на строку "bbb".
lsv>Как тоже самое проделать с массивом чисел?
lsv>Есть массив: 1,2,3,4 и переменная int *bbb, как вот ей присвоить указатель на этот массив?

Если я правильно понял, что именно тебе нужно, то в С++ пока никак, а вот в С99 можно:
#include <stdio.h>

int main()
{
    int* p = (int[]){ 1, 2, 3, 0 };

    while(*p) printf("%d\n", *p++);

    return 0;
}
Re[3]: Инициализация указателя на массив
От: LaptevVV Россия  
Дата: 23.03.04 08:32
Оценка: -2
Здравствуйте, Vamp, Вы писали:

V>Лаптев! Не путайте товарища!

LVV>>1. Имя массива и есть указатель.
V>ИМЯ МАССИВА НЕ ЕСТЬ УКАЗАТЕЛЬ.
Есть! Только константа-указатель.
Именно поэтому можно писать присваивание для массива без всяких операций взятия адреса.
А также при передаче параметра в функцию имя массива на месте параметра-указателя пишется без всяких амперсандов.
Еще у Кернигана и Ричи написано.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Инициализация указателя на массив
От: LaptevVV Россия  
Дата: 23.03.04 08:33
Оценка: -1
Здравствуйте, Анатолий Широков, Вы писали:

LVV>>1. Имя массива и есть указатель.


АШ>Массив приводится к указателю на первый элемент, но это суть две разные сущности.

Мы говорим не о массиве, а об имени массива. Так же как имя функции есть константа — указатель на функцию. Именно поэтому без операций взятия адреса можно имя массива использовать — еще у кернигана и ричи написано было.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Инициализация указателя на массив
От: Lorenzo_LAMAS  
Дата: 23.03.04 08:35
Оценка:
Имя — это не сущность. Имя — это использование идентификатора.
Of course, the code must be complete enough to compile and link.
Re[4]: Инициализация указателя на массив
От: Lorenzo_LAMAS  
Дата: 23.03.04 08:36
Оценка:
АШ>>Массив приводится к указателю на первый элемент, но это суть две разные сущности.
LVV>Мы говорим не о массиве, а об имени массива. Так же как имя функции есть константа — указатель на функцию. Именно поэтому без операций взятия адреса можно имя массива использовать — еще у кернигана и ричи написано было.


Имя массива — это имя массива, а не указатель. Есть стандартное преобразование array to pointer и есть ряд выражений, в которых оно применяется. Наш случай — один из таких.
Of course, the code must be complete enough to compile and link.
Re[4]: Инициализация указателя на массив
От: Lorenzo_LAMAS  
Дата: 23.03.04 08:39
Оценка:
LVV>Именно поэтому можно писать присваивание для массива без всяких операций взятия адреса.
LVV>А также при передаче параметра в функцию имя массива на месте параметра-указателя пишется без всяких амперсандов.

Потому, что если Вы напишете с & -то получите адрес массива, т.е. rvalue типа int (*)[размер]

LVV>Еще у Кернигана и Ричи написано.


Страницу, абзац, строку оригинала. А еще проще, раз уж так на С потянуло, стандарт C99 поглядеть
Of course, the code must be complete enough to compile and link.
Re[3]: Инициализация указателя на массив
От: lsv  
Дата: 23.03.04 08:39
Оценка:
Мне нужно что-то типа:
int *ccc = (int[]){1,2,4};
но это не работает.
Как написать чтоб работало?
Re[4]: Инициализация указателя на массив
От: Анатолий Широков СССР  
Дата: 23.03.04 08:40
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Анатолий Широков, Вы писали:


LVV>>>1. Имя массива и есть указатель.


АШ>>Массив приводится к указателю на первый элемент, но это суть две разные сущности.

LVV>Мы говорим не о массиве, а об имени массива. Так же как имя функции есть константа — указатель на функцию. Именно поэтому без операций взятия адреса можно имя массива использовать — еще у кернигана и ричи написано было.

Причем здесь имя? Адрес функции и адрес массива — константы. А вот о допустимых приведениях — 4 в общем, и 4.2, 4.3 в частности — именно благодаря этому мы может использовать конструкции типа:

int arr[] = {1, 2, 3, 4};
int *ptr = arr;
Re[4]: Инициализация указателя на массив
От: Анатолий Широков СССР  
Дата: 23.03.04 08:43
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Имя — это не сущность. Имя — это использование идентификатора.


Я говорил о массиве и указателе.
Re[5]: Инициализация указателя на массив
От: lsv  
Дата: 23.03.04 08:44
Оценка:
ДАЛОЙ ЛИШНИЕ ПЕРЕМЕННЫЕ. (Автор вопроса).
Re[4]: Инициализация указателя на массив
От: Lorenzo_LAMAS  
Дата: 23.03.04 08:44
Оценка:
Если ты пишешь на С99 и у тебя хороший компилятор, то должно работать. Комо онлайн скомпилировал.
Of course, the code must be complete enough to compile and link.
Re[6]: Инициализация указателя на массив
От: Анатолий Широков СССР  
Дата: 23.03.04 08:45
Оценка:
Здравствуйте, lsv, Вы писали:

lsv>ДАЛОЙ ЛИШНИЕ ПЕРЕМЕННЫЕ. (Автор вопроса).


Объяснитесь.
Re[5]: Инициализация указателя на массив
От: Lorenzo_LAMAS  
Дата: 23.03.04 08:46
Оценка:
ок
Of course, the code must be complete enough to compile and link.
Re[7]: Инициализация указателя на массив
От: Lorenzo_LAMAS  
Дата: 23.03.04 08:47
Оценка:
АШ>Объяснитесь.

Ему нужен аналог строкового литерала, только это составной целый литерал. В С99 такое возможно.
Of course, the code must be complete enough to compile and link.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.