Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
Mazanakisicq
0 / 0 / 0
Регистрация: 14.11.2010
Сообщений: 13
#1

Ищу начинающих программистов! - C++

13.07.2011, 16:02. Просмотров 3362. Ответов 49
Метки нет (Все метки)

Ищу начинающих или продвинутых программистов на C++,C,Objective-C,C# для общения и обмена опытом!
Недавно таким образом учился знакомый говорит очень помогло. Поэтому кто готов к обмену опытом и к взаимопомощи. Пишите email в личку или прям сюда. Желательно что бы был GMAIL.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CAHTEXHUK
Заблокирован
14.07.2011, 13:07     Ищу начинающих программистов! #41
Цитата Сообщение от OstapBender Посмотреть сообщение
нет смысла писать this-> в методах, однако пишут.
про this не в тему. Мой вариант всяко понятнее. Любой кто увидит это
Цитата Сообщение от voral Посмотреть сообщение
&A[0][0]
сразу поймёт что человек не понимает что он делает

Добавлено через 1 минуту
Цитата Сообщение от l_a_m Посмотреть сообщение
эм... а не проще ли
А имеет **инт, в данном примере его подставить нельзя. Получается функция выводит строки матрицы. Конечно проще сделать функцию которая получает матрицу и выводит её, тогда Можно было подставить А

Добавлено через 1 минуту
это относится про PrintDiag в посте #34
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 13:08     Ищу начинающих программистов! #42
CAHTEXHUK, зря вы так говорите. я лично пишу всегда &a[0][0] и при этом прекрасно понимаю, что я передаю адрес 0-го элемента -0ой строки, то есть адрес первого элемента матрицы, то есть простой указатель.
когда пишешь a[0] то передаешь как-будто строку в функцию, и может создастся впечатление что работа будет со строкой. я пишу так когда нужно построчно работать.
C
1
2
3
int a[4][4];
for (int i=0; I,4; i++)
func(a[i],4); // в данном случае писать &a[i][0] реально тупо
это всё равно что спорить, что круче (!p) или (p==0)
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
14.07.2011, 13:09     Ищу начинающих программистов! #43
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
А имеет **инт, в да.....
пардон, не заметил хотя указатель на указатель - это что-то из области буддизма
voral
392 / 372 / 50
Регистрация: 16.03.2008
Сообщений: 1,862
14.07.2011, 13:14     Ищу начинающих программистов! #44
Цитата Сообщение от l_a_m Посмотреть сообщение




? или может я чего-то не понимаю в этой жизни...
C++
1
2
3
4
5
6
7
8
9
void PrintDiag(int* arr, int N, int M)
{
    int i,j;
   for (i = 0; i < N; i++)
      for ( j = 0; j < N; j++)
         printf("%d ", *(arr + (i * N + j))); // выводите, то что Вам нужно..
}
....
   PrintDiag(A1, M1,N1);
Bash
1
2
3
test3.c: In function ‘main’:
test3.c:30: warning: passing argument 1 of ‘PrintDiag’ from incompatible pointer type
test3.c:20: note: expected ‘int *’ but argument is of type ‘int (*)[5]
Добавлено через 1 минуту
Цитата Сообщение от OstapBender Посмотреть сообщение
voral, массивы сделай динамическими и этот вариант заработает, и никаких смещений выщитывать не нужно, оператор [] перегружен уже
Так мой вопрос был именно в этом. С динамическим то массивом я сталкивался.
CAHTEXHUK
Заблокирован
14.07.2011, 13:16     Ищу начинающих программистов! #45
Цитата Сообщение от OstapBender Посмотреть сообщение
// в данном случае писать &a[i][0] реально тупо
про это и речь как бы
voral
392 / 372 / 50
Регистрация: 16.03.2008
Сообщений: 1,862
14.07.2011, 13:34     Ищу начинающих программистов! #46
Хотел посмотреть вопрос A[M][N] vs A[M*N]. Заметил, что *(A+i)=Q; использует больше команд чем A[i]=Q..... Я почемуто думал что первый вариант не хуже.... Или там уже глубже идет преимущество?
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
#include <stdio.h>
void test1()
{
    int A[3][3];
    A[1][2]=3;
}
/*
0x0000000000400494 <test1+0>:   push   %rbp
0x0000000000400495 <test1+1>:   mov    %rsp,%rbp
0x0000000000400498 <test1+4>:   movl   $0x3,-0x1c(%rbp)
0x000000000040049f <test1+11>:  leaveq
0x00000000004004a0 <test1+12>:  retq
*/
 
void test2()
{
    int A[9];
    A[3 * 1+2]=3;
}
/*
0x00000000004004a1 <test2+0>:   push   %rbp
0x00000000004004a2 <test2+1>:   mov    %rsp,%rbp
0x00000000004004a5 <test2+4>:   movl   $0x3,-0x1c(%rbp)
0x00000000004004ac <test2+11>:  leaveq
0x00000000004004ad <test2+12>:  retq
*/
void test3()
{
    int A[9];
    *(A+3 * 1+2)=3;
}
/*
0x00000000004004ae <test3+0>:   push   %rbp
0x00000000004004af <test3+1>:   mov    %rsp,%rbp
0x00000000004004b2 <test3+4>:   lea    -0x30(%rbp),%rax
0x00000000004004b6 <test3+8>:   add    $0x14,%rax
0x00000000004004ba <test3+12>:  movl   $0x3,(%rax)
0x00000000004004c0 <test3+18>:  leaveq
0x00000000004004c1 <test3+19>:  retq
*/
 
void test4()
{
    int A[9];
    A[5]=3;
}
/*
0x00000000004004c2 <test4+0>:   push   %rbp
0x00000000004004c3 <test4+1>:   mov    %rsp,%rbp
0x00000000004004c6 <test4+4>:   movl   $0x3,-0x1c(%rbp)
0x00000000004004cd <test4+11>:  leaveq
0x00000000004004ce <test4+12>:  retq
*/
 
void test5()
{
    int A[9];
    *(A+5)=3;
}
/*
0x00000000004004cf <test5+0>:   push   %rbp
0x00000000004004d0 <test5+1>:   mov    %rsp,%rbp
0x00000000004004d3 <test5+4>:   lea    -0x30(%rbp),%rax
0x00000000004004d7 <test5+8>:   add    $0x14,%rax
0x00000000004004db <test5+12>:  movl   $0x3,(%rax)
0x00000000004004e1 <test5+18>:  leaveq
0x00000000004004e2 <test5+19>:  retq
*/
 
int main()
{
    test1();
    test2();
    test3();
    test4();
    test5();
}
VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
14.07.2011, 13:57     Ищу начинающих программистов! #47
Давайте о C# немного поговорим!
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
14.07.2011, 13:57     Ищу начинающих программистов! #48
Цитата Сообщение от voral Посмотреть сообщение
Хотел посмотреть вопрос A[M][N] vs A[M*N]. Заметил, что *(A+i)=Q; использует больше команд чем A[i]=Q..... Я почемуто думал что первый вариант не хуже.... Или там уже глубже идет преимущество?
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
#include <stdio.h>
void test1()
{
    int A[3][3];
    A[1][2]=3;
}
/*
0x0000000000400494 <test1+0>:   push   %rbp
0x0000000000400495 <test1+1>:   mov    %rsp,%rbp
0x0000000000400498 <test1+4>:   movl   $0x3,-0x1c(%rbp)
0x000000000040049f <test1+11>:  leaveq
0x00000000004004a0 <test1+12>:  retq
*/
 
void test2()
{
    int A[9];
    A[3 * 1+2]=3;
}
/*
0x00000000004004a1 <test2+0>:   push   %rbp
0x00000000004004a2 <test2+1>:   mov    %rsp,%rbp
0x00000000004004a5 <test2+4>:   movl   $0x3,-0x1c(%rbp)
0x00000000004004ac <test2+11>:  leaveq
0x00000000004004ad <test2+12>:  retq
*/
void test3()
{
    int A[9];
    *(A+3 * 1+2)=3;
}
/*
0x00000000004004ae <test3+0>:   push   %rbp
0x00000000004004af <test3+1>:   mov    %rsp,%rbp
0x00000000004004b2 <test3+4>:   lea    -0x30(%rbp),%rax
0x00000000004004b6 <test3+8>:   add    $0x14,%rax
0x00000000004004ba <test3+12>:  movl   $0x3,(%rax)
0x00000000004004c0 <test3+18>:  leaveq
0x00000000004004c1 <test3+19>:  retq
*/
 
void test4()
{
    int A[9];
    A[5]=3;
}
/*
0x00000000004004c2 <test4+0>:   push   %rbp
0x00000000004004c3 <test4+1>:   mov    %rsp,%rbp
0x00000000004004c6 <test4+4>:   movl   $0x3,-0x1c(%rbp)
0x00000000004004cd <test4+11>:  leaveq
0x00000000004004ce <test4+12>:  retq
*/
 
void test5()
{
    int A[9];
    *(A+5)=3;
}
/*
0x00000000004004cf <test5+0>:   push   %rbp
0x00000000004004d0 <test5+1>:   mov    %rsp,%rbp
0x00000000004004d3 <test5+4>:   lea    -0x30(%rbp),%rax
0x00000000004004d7 <test5+8>:   add    $0x14,%rax
0x00000000004004db <test5+12>:  movl   $0x3,(%rax)
0x00000000004004e1 <test5+18>:  leaveq
0x00000000004004e2 <test5+19>:  retq
*/
 
int main()
{
    test1();
    test2();
    test3();
    test4();
    test5();
}
а теперь скомпилируйте это всё в Release режиме и после этого продизасемблируйте, мне кажется, что разницы не будет, ну или практически не будет.

Добавлено через 51 секунду
Цитата Сообщение от VolodiaVoz Посмотреть сообщение
Давайте о C# немного поговорим!
Давайте ) линк в соответствующую ветку форума дать или сами догадаетесь? )
voral
392 / 372 / 50
Регистрация: 16.03.2008
Сообщений: 1,862
14.07.2011, 14:26     Ищу начинающих программистов! #49
Цитата Сообщение от l_a_m Посмотреть сообщение
а теперь скомпилируйте это всё в Release режиме и после этого продизасемблируйте, мне кажется, что разницы не будет, ну или практически не будет.
Да я специально компилировал с -O0. Понимаю, что после оптимизации многое, что меняется.....
Значит профит от *(a+i) появляется при оптимизации?

Добавлено через 1 минуту
Черт... А как при полной оптимизации в gdb увидеть что получилось?
disassemble test1
дает
Assembler
1
0x00000000004004a0 <test1+0>:   repz retq
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2011, 15:14     Ищу начинающих программистов!
Еще ссылки по теме:

Литература по C++ для начинающих C++
C++ Уроки С++ для начинающих
C++ Литература для начинающих
Задачник для начинающих C++
C++ Многопоточность для начинающих

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

Или воспользуйтесь поиском по форуму:
NickoTin
Почетный модератор
8224 / 3508 / 237
Регистрация: 14.06.2010
Сообщений: 4,510
Записей в блоге: 9
14.07.2011, 15:14     Ищу начинающих программистов! #50
Тема закрыта т.к. обсуждается здесь уже все подряд.
Да и ТС не видно со вчерашнего дня...
Yandex
Объявления
14.07.2011, 15:14     Ищу начинающих программистов!
Закрытая тема Создать тему
Опции темы

Текущее время: 14:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru