Home>Article>Backend Development> What is the difference between array pointer and pointer array

What is the difference between array pointer and pointer array

青灯夜游
青灯夜游 Original
2021-07-13 11:31:00 3913browse

Difference: The pointer array itself is an array, and the elements of the array are pointers, that is, the array stores pointers. The number of bytes occupied by the array is determined by the array itself; and the array pointer itself is a pointer, which points to An array, that is, it is a pointer to an array, always occupies 4 bytes on a 32-bit system.

What is the difference between array pointer and pointer array

The operating environment of this tutorial: windows7 system, c99 version, Dell G3 computer.

I believe many C programmers will be confused about the concepts of pointer arrays and array pointers. Let's analyze the difference between the two through two simple statements. The sample code is as follows:

int *p1[5]; int (*p2)[5];

First, for the statement "int*p1[5]", because "[]" takes precedence The level is higher than "*", so p1 is first combined with "[]" to form the definition of an array. The array is named p1, and "int*" modifies the content of the array, that is, each element of the array. That is, the array contains 5 pointers to int type data, as shown in Figure 1, therefore, it is an array of pointers.

What is the difference between array pointer and pointer array

Secondly, for the statement "int(*p2)[5]", "()" has a higher priority than "[]", and the "*" sign and p2 It constitutes the definition of a pointer. The pointer variable is named p2, and int modifies the content of the array, that is, each element of the array. That is, p2 is a pointer that points to an array containing 5 int type data, as shown in Figure 2. Obviously, it is an array pointer. The array has no name here and is an anonymous array.

What is the difference between array pointer and pointer array

It can be seen that for a pointer array, first of all, it is an array, and the elements of the array are pointers. That is to say, the array stores pointers, and the array occupies The number of bytes is determined by the array itself; and for the array pointer, first of all, it is a pointer, which points to an array, that is to say, it is a pointer to the array, which always occupies 4 bytes in a 32-bit system. As for it How many bytes the pointed array occupies cannot be determined, it depends on the specific situation.

After understanding the difference between pointer arrays and array pointers, continue to look at the following sample code:

int arr[5]={1,2,3,4,5}; int (*p1)[5] = &arr; /*下面是错误的*/ int (*p2)[5] = arr;

It is not difficult to see that in the above sample code, &arr refers to the entire The first address of the array, and arr refers to the first address of the first element of the array. Although they have different meanings, the values between the two are the same. Then the question arises, since the values are the same, why the statement "int(*p1)[5]=&arr" is correct, but the statement "int(*p2)[5]=arr" runs under some compilers An error message will appear.

In fact, the reason is very simple. In C language, the data types on both sides of the assignment symbol "=" must be the same. If they are different, explicit or implicit type conversion is required. Here, p1 and p2 are both array pointers, pointing to the entire array. The data types on both sides of the "=" sign in p1's definition are completely consistent, but the data types on both sides of the "=" sign in p2's definition are inconsistent (the type on the left is a pointer to the entire array, while the data type on the right is a pointer to a single character pointer), so an error message will be prompted.

Related recommendations: "C Language Video Tutorial"

The above is the detailed content of What is the difference between array pointer and pointer array. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn