c++ - 关于C语言char*指针的问题
PHPz
PHPz 2017-04-17 15:25:53
0
6
904

代码如下:

#include<stdio.h>

int main(void)
 {
     char* p = "xxx";

    printf("%c",*p);
    return 0;
}

为啥一定要加*号才能正确显示字符串的第一个字符呢?
不是p指针存了这个字符串了吗?
本人刚学C没多久,请大神们解析得仔细点,谢谢

PHPz
PHPz

学习是最好的投资!

모든 응답(6)
左手右手慢动作

먼저 편집기를 사용하여 디버그하고 printf 줄에 중단점을 놓은 다음 모니터를 보고 p와 *p가 각각 무엇을 가리키는지 확인하는 것이 좋습니다.
그러면 p는 문자 배열의 첫 번째 요소의 주소를 가리키는 문자 포인터 유형이고, *p는 첫 번째 요소인 p가 가리키는 값을 취합니다.
이해하시면 p ,*p 의 결과와 연산 후 p의 값은 무엇인지 생각해 보실 수 있습니다

大家讲道理

우선 C에는 이런 종류의 문자열이 없습니다. C의 문자열은 널 문자로 끝나는 문자 배열입니다.
그러면 p 포인터는 문자열이 아니라 문자 배열의 선두를 저장합니다. 요소의 주소입니다.
따라서 간접 연산자 *를 사용하여 이 문자 배열의 첫 번째 요소인 이 주소의 값을 읽을 수 있습니다.

巴扎黑

여기서 p의 유형은 포인터이므로 p을 직접 사용하면 p이 가리키는 메모리 주소에 문자열 xxx가 저장됩니다. 이 포인터가 가리키는 내용을 출력하려면 앞에 *를 붙입니다.

小葫芦

먼저 p은 주소를 저장하는 포인터형인데, 이 주소가 index인데, 이는 전체 문자열(실제로는 문자열이 아님)의 첫 번째 문자의 주소로 이해될 수 있으며, 배열의 첫 번째 요소와 유사합니다. *이 기호는 포인터 변수를 정의할 때 정의하고 호출할 때 주소에 있는 값을 가져오는 것을 말합니다.
printf("%c",*p);, 명령문에 *을 추가하지 않으면 출력하는 것은 p의 값이지만 p의 값은 주소이므로 당연히 그렇지 않습니다. 실제로 존재하는 p 주소를 가져옵니다. *을 추가하면 이 주소에 저장된 값을 얻을 수 있습니다.

Ty80

'*'를 추가하지 않고 추가할 수도 있습니다. 배열 첨자를 사용하여 첫 번째 문자를 출력할 수도 있습니다

으아악
迷茫

p는 요소를 가리키는 주소를 저장합니다. 를 추가하지 않으면 를 가리키는 요소가 인쇄됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿