>  기사  >  백엔드 개발  >  문자열 할당은 무엇을 의미하나요?

문자열 할당은 무엇을 의미하나요?

藏色散人
藏色散人원래의
2019-06-04 10:19:179949검색

문자열은 주로 프로그래밍에 사용됩니다. 문자열은 저장소의 문자 배열과 유사하므로 각 비트의 단일 요소를 추출할 수 있습니다. 예를 들어 s="abcdefghij", s[1]="a", s[ 9 ]="j"이고 문자열의 0 위치는 s[0]=10과 같이 정확히 문자열의 길이입니다. (※Ansistring에는 위의 기능이 없습니다.) 이는 다음과 같은 많은 편의를 제공할 수 있습니다. 각각의 고정밀 연산이 수행될 때 비트는 숫자로 변환되어 배열에 저장될 수 있습니다.

문자열 할당은 무엇을 의미하나요?

그러나 문자열 할당에는 특정 요구 사항이 있습니다. 예를 들어 C 언어 연산자는 문자열에 대해 전혀 작업을 수행할 수 없습니다. C 언어에서는 문자열이 배열로 처리되므로 문자열에는 배열과 동일한 제한이 적용됩니다. 특히 C 언어 연산자를 사용하여 문자열을 복사하고 비교할 수 없습니다.

문자열 할당 방법

C 언어에는 두 가지 문자열 표현이 있습니다. 하나는 char str[20]="I love china"와 같은 문자 배열 형식입니다. 문자 배열 char *str="I love china"와 같은 문자 포인터의 형태. 문자열을 문자 포인터 변수에 할당하거나 문자열을 문자 배열에 저장할 수 있습니다. C 언어는 문자열에 대한 구문 설탕 지원을 직접 제공하지 않기 때문입니다. 또한 C 표준 라이브러리의 많은 메서드는 기억해야 하는 널 문자 종료를 기반으로 문자열을 처리합니다.

char *p,a='5';
p=&a;                     //显然是正确的,
p="abcd";              //但为什么也可以这样赋值??

위 프로그램에서 큰따옴표는 세 가지 작업을 수행합니다. 즉, 상수 영역에 공백을 적용하고 문자열을 저장합니다. 반환 주소에 '/0'을 추가합니다. 여기서 반환된 주소는 p에 할당됩니다.

왜 char *p = “hello”; 표현식은 작동하지만 p를 배열로 변경한 다음 값을 할당하면 작동하지 않습니다. 이는 문자열 상수 "hello"가 표현식에 나타날 때 "hello" 표현식에서 사용되는 값이 문자 자체가 아니라 해당 문자가 저장되는 주소(상수 영역)이기 때문입니다.

따라서 문자를 가리키는 포인터 p에 문자열을 할당할 수 있지만 문자 배열에는 문자열을 할당할 수 없습니다.

char a[10] = “hello”; 이 상황은 C 언어 초기화에서도 지원됩니다. char a[10]으로 쓰여지면 a = "hello" 이는 잘못된 것입니다. 또한 a의 배열입니다. char a[10] = "hello"; 이는 배열의 초기화이며 a[0] = 'h' a[1] = 'e'…

하지만 char a [10]으로 변경하면 a = "hello"가 작동하지 않습니다. "hello"에 할당된 값은 주소이며 a에도 주소가 있지만 이는 포인터의 값과 다릅니다. 포인터는 주소이고 배열의 값도 주소이지만 상수이므로 상수에 값을 할당할 수 없습니다. [3]

테스트해 보겠습니다.

#include <stdio.h> int main(){       char *p = "hello";        printf("%s",p);       
        char a[10];        a = "hello";      
        return 0;}error C2440: &#39;=&#39; : cannot convert from &#39;char [6]&#39; to &#39;char [10]&#39;        There is no context in which this conversion is possible

이러한 오류 메시지가 표시되면 char a[10]를 char a[6]

error C2106: ‘=’ : left operand must be l-value

로 변경해 보세요. 연산자의 왼쪽은 "lvalue"여야 합니다. 소위 "lvalue"는 프로그램에서 메모리 공간을 차지하는 양을 말하며 다양한 변수 등 수정이 가능합니다.

포인터를 사용할 때 포인터는 스스로 증가할 수 있지만 배열 이름은 스스로 증가할 수 없습니다. 컴파일러는 배열에 공간을 할당하며 배열 a의 주소는 상수를 나타내는 것이 불가능합니다. 자체적으로 증가합니다.

동시에 포인터가 증가하면 컴파일러는 자동으로 유형을 식별합니다. 예를 들어 포인터가 int 유형을 가리키는 경우 다음 주소를 얻으려면 포인터에 p++를 사용하지 마세요. p+4를 사용하세요.

void 포인터를 사용할 때 포인터 연산을 사용할 수 없다는 점에 유의해야 합니다. 왜냐하면 void 컴파일러는 유형의 길이(즉, 포인터가 가리키는 객체의 볼륨)를 인식할 수 없기 때문입니다. 이는 p++에서는 불법입니다. 즉, 연산을 수행할 수 없으며 * 값 연산을 사용할 수 없습니다.

위 내용은 문자열 할당은 무엇을 의미하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.