C 언어
이 튜토리얼에서는 예제를 통해 배열과 포인터의 관계에 대해 배울 것입니다.
C++에서 포인터는 다른 변수의 주소를 보유하는 변수입니다. 포인터는 단일 변수의 주소를 저장할 수 있을 뿐만 아니라 배열의 셀 주소도 저장할 수 있습니다.
다음 예를 고려하십시오.
int *ptr;
int arr[5];
// store the address of the first
// element of arr in ptr
ptr = arr;
여기, ptr arr 동안 포인터 변수입니다. int
입니다. 정렬. 코드 ptr = arr;
변수 ptr에 배열의 첫 번째 요소 주소를 저장합니다. .
arr
를 사용했습니다. &arr[0]
대신 . 이것은 둘 다 동일하기 때문입니다. 따라서 아래의 코드는 위의 코드와 동일합니다.
int *ptr;
int arr[5];
ptr = &arr[0];
나머지 배열 요소의 주소는 &arr[1]
으로 지정됩니다. , &arr[2]
, &arr[3]
, 및 &arr[4]
.
동일한 포인터 ptr을 사용하여 배열의 네 번째 요소를 가리킬 필요가 있다고 가정합니다. .
여기서 ptr이면 위의 예에서 첫 번째 요소를 가리킨 다음 ptr + 3
를 가리킵니다. 네 번째 요소를 가리킬 것입니다. 예를 들어,
int *ptr;
int arr[5];
ptr = arr;
ptr + 1 is equivalent to &arr[1];
ptr + 2 is equivalent to &arr[2];
ptr + 3 is equivalent to &arr[3];
ptr + 4 is equivalent to &arr[4];
마찬가지로 단일 포인터를 사용하여 요소에 액세스할 수 있습니다. 예를 들어,
// use dereference operator
*ptr == arr[0];
*(ptr + 1) is equivalent to arr[1];
*(ptr + 2) is equivalent to arr[2];
*(ptr + 3) is equivalent to arr[3];
*(ptr + 4) is equivalent to arr[4];
ptr = &arr[2];
을 초기화했다고 가정합니다. 그럼
ptr - 2 is equivalent to &arr[0];
ptr - 1 is equivalent to &arr[1];
ptr + 1 is equivalent to &arr[3];
ptr + 2 is equivalent to &arr[4];
<그림>
참고: ptr 사이의 주소 및 ptr + 1 4바이트 차이가 납니다. ptr 때문입니다. int
에 대한 포인터입니다. 데이터. 그리고 int의 크기는 64비트 운영체제에서 4바이트입니다.
마찬가지로 포인터가 ptr이면 char
을(를) 가리키고 있습니다. 데이터를 입력한 다음 ptr 사이의 주소 및 ptr + 1 1바이트입니다. 한 글자의 크기가 1byte이기 때문입니다.
// C++ Program to display address of each element of an array
#include <iostream>
using namespace std;
int main()
{
float arr[3];
// declare pointer variable
float *ptr;
cout << "Displaying address using arrays: " << endl;
// use for loop to print addresses of all array elements
for (int i = 0; i < 3; ++i)
{
cout << "&arr[" << i << "] = " << &arr[i] << endl;
}
// ptr = &arr[0]
ptr = arr;
cout<<"\nDisplaying address using pointers: "<< endl;
// use for loop to print addresses of all array elements
// using pointer notation
for (int i = 0; i < 3; ++i)
{
cout << "ptr + " << i << " = "<< ptr + i << endl;
}
return 0;
}
출력
Displaying address using arrays: &arr[0] = 0x61fef0 &arr[1] = 0x61fef4 &arr[2] = 0x61fef8 Displaying address using pointers: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8
위의 프로그램에서 우리는 먼저 포인터 변수 ptr을 사용하지 않고 단순히 배열 요소의 주소를 출력했습니다. .
그런 다음 ptr 포인터를 사용했습니다. a[0]의 주소를 가리키기 위해 , ptr + 1
a[1]의 주소를 가리키기 위해 등이 있습니다.
대부분의 컨텍스트에서 배열 이름은 포인터로 소멸됩니다. 간단히 말해서 배열 이름은 포인터로 변환됩니다. 이것이 포인터를 사용하여 배열 요소에 액세스할 수 있는 이유입니다.
그러나 포인터와 배열은 동일하지 않다는 것을 기억해야 합니다.
배열 이름이 포인터로 붕괴되지 않는 몇 가지 경우가 있습니다. 자세한 내용은 다음을 참조하십시오. 배열 이름이 포인터로 소멸되지 않는 경우는 언제입니까?
<시간>
// C++ Program to insert and display data entered by using pointer notation.
#include <iostream>
using namespace std;
int main() {
float arr[5];
// Insert data using pointer notation
cout << "Enter 5 numbers: ";
for (int i = 0; i < 5; ++i) {
// store input number in arr[i]
cin >> *(arr + i) ;
}
// Display data using pointer notation
cout << "Displaying data: " << endl;
for (int i = 0; i < 5; ++i) {
// display value of arr[i]
cout << *(arr + i) << endl ;
}
return 0;
}
출력
Enter 5 numbers: 2.5 3.5 4.5 5 2 Displaying data: 2.5 3.5 4.5 5 2
여기,
먼저 포인터 표기법을 사용하여 사용자가 입력한 숫자를 arr 배열에 저장했습니다. .
cin >> *(arr + i) ;
이 코드는 아래 코드와 동일합니다.
cin >> arr[i];
별도의 포인터 변수를 선언하지 않고 arr 배열 이름을 사용하고 있습니다. 포인터 표기법.
이미 알고 있듯이 배열 이름 arr 배열의 첫 번째 요소를 가리킵니다. 그래서 우리는 arr을 생각할 수 있습니다. 포인터처럼 작동합니다.
마찬가지로 for
를 사용했습니다. arr 값을 표시하는 루프 포인터 표기법 사용.
cout << *(arr + i) << endl ;
이 코드는
와 동일합니다.
cout << arr[i] << endl ;
C 언어
C 프로그래밍 언어란 무엇입니까? C는 Dennis Ritchie가 1972년 Bell Lab에서 개발한 중간 수준 프로그래밍 언어입니다. C 언어는 저수준 언어와 고급 언어의 기능을 결합합니다. 따라서 중급 언어로 간주됩니다. C는 펌웨어 및 휴대용 응용 프로그램을 개발할 수 있는 고급 클래식 유형 프로그래밍 언어입니다. C 언어는 시스템 소프트웨어 작성을 목적으로 개발되었습니다. 펌웨어 시스템 개발에 이상적인 언어입니다. C++ 프로그래밍 언어란 무엇입니까? C++는 C 프로그래밍 언어의 기능과 Simula67(첫 번째 객
배열 net 또는 변수의 선언은 스칼라 또는 벡터가 될 수 있습니다. 식별자 이름 뒤에 주소 범위를 지정하여 여러 차원을 만들 수 있으며 이를 다차원 배열이라고 합니다. reg에 대해 Verilog에서 배열이 허용됩니다. , wire , integer 및 real 데이터 유형. reg y1 [11:0]; // y is an scalar reg array of depth=12, each 1-bit wide wire [0:7] y2 [3:0] // y is an 8-bit vect