Пример: char *aaa = "bbb";
В этом случае переменная ааа будет содержать указатель на строку "bbb".
Как тоже самое проделать с массивом чисел?
Есть массив: 1,2,3,4 и переменная int *bbb, как вот ей присвоить указатель на этот массив?
Здравствуйте, 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; //1int *b2 = &a[0]; //2
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, 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;
}
Здравствуйте, Vamp, Вы писали:
V>Лаптев! Не путайте товарища! LVV>>1. Имя массива и есть указатель. V>ИМЯ МАССИВА НЕ ЕСТЬ УКАЗАТЕЛЬ.
Есть! Только константа-указатель.
Именно поэтому можно писать присваивание для массива без всяких операций взятия адреса.
А также при передаче параметра в функцию имя массива на месте параметра-указателя пишется без всяких амперсандов.
Еще у Кернигана и Ричи написано.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Анатолий Широков, Вы писали:
LVV>>1. Имя массива и есть указатель.
АШ>Массив приводится к указателю на первый элемент, но это суть две разные сущности.
Мы говорим не о массиве, а об имени массива. Так же как имя функции есть константа — указатель на функцию. Именно поэтому без операций взятия адреса можно имя массива использовать — еще у кернигана и ричи написано было.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
АШ>>Массив приводится к указателю на первый элемент, но это суть две разные сущности. LVV>Мы говорим не о массиве, а об имени массива. Так же как имя функции есть константа — указатель на функцию. Именно поэтому без операций взятия адреса можно имя массива использовать — еще у кернигана и ричи написано было.
Имя массива — это имя массива, а не указатель. Есть стандартное преобразование array to pointer и есть ряд выражений, в которых оно применяется. Наш случай — один из таких.
Of course, the code must be complete enough to compile and link.
LVV>Именно поэтому можно писать присваивание для массива без всяких операций взятия адреса. LVV>А также при передаче параметра в функцию имя массива на месте параметра-указателя пишется без всяких амперсандов.
Потому, что если Вы напишете с & -то получите адрес массива, т.е. rvalue типа int (*)[размер]
LVV>Еще у Кернигана и Ричи написано.
Страницу, абзац, строку оригинала. А еще проще, раз уж так на С потянуло, стандарт C99 поглядеть
Of course, the code must be complete enough to compile and link.
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, Анатолий Широков, Вы писали:
LVV>>>1. Имя массива и есть указатель.
АШ>>Массив приводится к указателю на первый элемент, но это суть две разные сущности. LVV>Мы говорим не о массиве, а об имени массива. Так же как имя функции есть константа — указатель на функцию. Именно поэтому без операций взятия адреса можно имя массива использовать — еще у кернигана и ричи написано было.
Причем здесь имя? Адрес функции и адрес массива — константы. А вот о допустимых приведениях — 4 в общем, и 4.2, 4.3 в частности — именно благодаря этому мы может использовать конструкции типа: