Почему все они указывают на одно и то же место? Это оптимизация?c - Почему все они указывают на одно и то же место?
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
#include <conio.h>
const char* func1(const char str[]){
// printf("%p\n", str);
return str;
}
const char* func2(const char *str){
// printf("%p\n", str);
return str;
}
char* func3(char str[]){
// printf("%p\n", str);
return str;
}
char* func4(char *str){
// printf("%p\n", str);
return str;
}
int main(void)
{
char acStr[81] = {0};
const char *p1, *p2;
char *p3, *p4;
uint32_t uiCount;
srand (time(NULL));
for(uiCount = 0; uiCount < (sizeof(acStr) - 1); uiCount++){
acStr[uiCount] = rand() % 26 + 65;
}
acStr[80] = 0;
p1 = func1(acStr);
printf("p1 == %p\n", p1);
printf("%s", p1);
for(uiCount = 0; uiCount < (sizeof(acStr) - 1); uiCount++){
acStr[uiCount] = rand() % 26 + 65;
}
acStr[80] = 0;
p2 = func2(acStr);
printf("p2 == %p\n", p2);
printf("%s", p2);
for(uiCount = 0; uiCount < (sizeof(acStr) - 1); uiCount++){
acStr[uiCount] = rand() % 26 + 65;
}
acStr[80] = 0;
p3 = func3(acStr);
printf("p3 == %p\n", p3);
printf("%s", p3);
for(uiCount = 0; uiCount < (sizeof(acStr) - 1); uiCount++){
acStr[uiCount] = rand() % 26 + 65;
}
acStr[80] = 0;
p4 = func4(acStr);
printf("p4 == %p\n", p4);
printf("%s", p4);
printf("\n");
printf("p1 == %p\n", p1); /* Same address */
printf("%s", p1);
printf("p2 == %p\n", p2); /* Same address */
printf("%s", p2);
printf("p3 == %p\n", p3); /* Same address */
printf("%s", p3);
printf("p4 == %p\n", p4); /* Same address */
printf("%s", p4);
getch();
return 0;
}
Выход.
p1 == 000000000022FDC0 USOPBBREKRTCCAXRFVPJPEVPESVTAIQUXIPNMCAWHZGWWUSUUNCWNGFRCTHLJLANVSRQJCTCOOXQZIYX p2 == 000000000022FDC0 SVITQWBDXTQSUJKXIUKIANTUELJCJPVDYEBCIDGDWITCTZJTDERRPINICWNSIIKMAVTFKIUHEEGNEKBD p3 == 000000000022FDC0 IDTZXTQWPSRURMWBCAKXWKXJANLVHRDMDREGKBYKJZMDHYHSGRMYAAAGWWRWSAJMBYODZYBKMYPPMVXN p4 == 000000000022FDC0 TFCBRYSYRNNDUEEOQAPMAGOVQKYNIKNGOQJSBFKYTVRIGWHZMCLFNASRRSGDZWIXOVKYBRYPQOEXRFUJ p1 == 000000000022FDC0 TFCBRYSYRNNDUEEOQAPMAGOVQKYNIKNGOQJSBFKYTVRIGWHZMCLFNASRRSGDZWIXOVKYBRYPQOEXRFUJ p2 == 000000000022FDC0 TFCBRYSYRNNDUEEOQAPMAGOVQKYNIKNGOQJSBFKYTVRIGWHZMCLFNASRRSGDZWIXOVKYBRYPQOEXRFUJ p3 == 000000000022FDC0 TFCBRYSYRNNDUEEOQAPMAGOVQKYNIKNGOQJSBFKYTVRIGWHZMCLFNASRRSGDZWIXOVKYBRYPQOEXRFUJ p4 == 000000000022FDC0 TFCBRYSYRNNDUEEOQAPMAGOVQKYNIKNGOQJSBFKYTVRIGWHZMCLFNASRRSGDZWIXOVKYBRYPQOEXRFUJ
Я не быть ясно, что это потому, что я не говорю на английском (Перевод Google translante)
Потому что вы передаете им одно и то же каждый раз? –
Что именно вы ожидали? –
- разные указатели с различными функциями и всегда генерируют один и тот же адрес, затем я теряю значение предыдущего ... – sapitando