Hallo,
C++ is een heel uitgebreide taal die toch nog heel dicht bij "native" code aanleunt.
Er is bijvoorbeeld geen grens op arrays zoals in andere talen een "out of bound". In C kan je dan wel een fout krijgen als je niet leesbaar geheugen wilt lezen,...
int * p = 0;
// zal fout geven,...
int i = *p;
Maar er is dus geen grens op een array (of pointer naar)...
C Code:
#include "stdafx.h"
#include <windows.h>
byte mpbb[] = {
65, 54, 19, 98, 168, 33, 110, 187,
244, 22, 204, 4, 127, 100, 232, 93,
};
byte foobar[] = {
1,2,3,4,5,6,7,8
};
int _tmain(int argc, _TCHAR* argv[])
{
for(int i = 0; i < 24; i++){
printf("%d, ", *(mpbb +i));
}
printf("\n");
for(int i = 0; i < 24; i++){
printf("%d, ", mpbb[i]);
}
getchar();
return 0;
}
Output:
Code:
65, 54, 19, 98, 168, 33, 110, 187, 244, 22, 204, 4, 127, 100, 232, 93, 1, 2, 3,
4, 5, 6, 7, 8,
65, 54, 19, 98, 168, 33, 110, 187, 244, 22, 204, 4, 127, 100, 232, 93, 1, 2, 3,
4, 5, 6, 7, 8,
* mpbbR is dus een array
* mpbbS is dus een pointer
- ik wist het ook niet zonder deze test code
C Code:
#include "stdafx.h"
#include <Windows.h>
char a [] = {1,2};
#define a1 (a)
#define a2 (a+0)
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(a1));
printf("%d\n", sizeof(a2));
printf(sizeof(a1) == 2 ? "a1 is a array\n" : "a1 is a pointer\n");
printf(sizeof(a2) == 2 ? "a2 is a array\n" : "a2 is a pointer\n");
getchar();
return 0;
}
Output in 32 bit mode(x86):
Code:
2
2
4
a1 is a array
a2 is a pointer
Output in 64 bit mode(x64):
Code:
2
2
8
a1 is a array
a2 is a pointer
Groetjes