Язык С - указатели
Что то я запутался...
char str[50] str - это указатель на первый элемент массива, так??? если я делаю так: char **str[50] то это значит, что str - указывает на первый элемент массива указателей на массивы строк по 50 символов, так?? т.е. str[0] - это указатель на первый символ первой строки, так??? PS пожалуйста, попрошу без подъ***в в стиле кнайта и рисунков кирзовых сапогов :-D |
Ответ: Язык С - указатели
че то звездочек очень много... это задачка из учебника?
в любом случае это массив указателей на... |
Ответ: Язык С - указатели
в данной ситуации для понимания спасает typedef, тогда :
Код:
typedef char** temp_type; чтобы еще лучше понимать как работают статические массивы то можно записать так : Код:
typedef char** temp_type; аналогично можно память выделить динамически Код:
typedef char** temp_type; |
Ответ: Язык С - указатели
Чтобы проще понять указатели с массивами, приведи аналогию:
Есть простая переменная, и указатель на неё. Указатель ведёт на позицию в памяти, где хранится эта переменная, и имеет размер какой положено. Массив же, например размерностью в 10, будет иметь 10 переменных поочерёдно, таким образом, чтобы получить второй эллемент, то это указатель на первый эллемент + сместить на размер данного вперёд, получим уже указатель на второй. |
Ответ: Язык С - указатели
Да, я это знал, мока. Только вот путался - надо было сделать некий массив, в котором по индексам хранились бы названия переменных - то бишь char[] - ы, а в функцию надо было передать адрес массива, т.е. его первого элемента, в общем, я запутался, но решение нашел , хоть и корявое - прямо в функции создл двумерный массив чаров, и при выходе возвратил его. Коряво, но работает :)
В будушем поизучаю, занятная область :) ЗЫ столкнулся с новой проблемой - надо где-то нарыть функцию str_replace, в стд либах не нашел, можт кто знает, не?? |
Ответ: Язык С - указатели
напиши сам.
|
Ответ: Язык С - указатели
Google показывает, что str_replace связана с PHP.
|
Ответ: Язык С - указатели
|
Ответ: Язык С - указатели
Эх, щас уже понимаю что это все фигня :-D
в общем, дело такое. мб это баг. Имею строку a, такого содержания: 1=1 3-й символ, соответственно, ноль. Код: int n1=atoi(a+back); int n2=atoi(a+k+1); printf("[%s]\n",a+k+1); printf("%d %d\n",n1,n2); back в данном случае = 0, k = 1 Получаю: n1=1, n2=0(!) При этом printf("[%s]\n",a+k+1); пишет на экран [1], что доказывает, что a[k+1], т.е. a[2] == "1" Какого же дьявола в n2 пишется ноль??? ЗЫ причем, это только на конце строки такая хе**я, в середине|начале работает отлично |
Ответ: Язык С - указатели
Код:
#include <iostream> 1 1 Значения параметров точно такие? |
Ответ: Язык С - указатели
atoi работает не с одним символом, а со всей строкой, когда пишем atoi( a + back ) то он работает с "1=1", а когда пишем atoi( a + k + 1 ) то с "1"
правильнее сделать так : Код:
const char * a = "1=1"; |
Ответ: Язык С - указатели
Не знаю в чем был косяк, сделал по другому.
В общем новая проблема - не пойму, как записать байт в файл. Типа byte там нет :( |
Ответ: Язык С - указатели
Где там?
char |
Ответ: Язык С - указатели
Ага, я неправильно открывал, надо было fopen(file,"wb");
|
Часовой пояс GMT +4, время: 12:43. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot