なぜ彼らはすべて同じ場所を指していますか?それは最適化ですか?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
私はそれは、このように、私はあなたが引数として渡されたのと同じポインタを返すあなたの4つの機能では英語 (グーグルのtranslante訳)
毎回同じものを渡すためですか? –
あなたは正確に何を期待していましたか? –
は、異なる機能を持つ異なるポインタであり、常に同じアドレスを生成します。次に、以前の値を失います。 – sapitando