数组变量名可以被认为是一个常量指针。虽然可以将其视为指针,但不能修改变量名值。
例如,我们可以创建一个数组,然后通过使用下标或使用指针算术和使用星号 (*) 符号取消引用来访问数组的元素。
char myArray[20]; // an array of 20 characters
myArray[2] = 'C'; // assigning a value of the letter C to the third element of the array
*(myArray + 2) = 'K'; // assigning a value of the letter K to third element of the array
char *pmyArray; // a pointer to one or more characters, not yet initialized though.
pmyArray = myArray; // assigning the address of the first element of the array to my pointer
*(pmyArray + 2) = 'J'; // assigning a value of the letter J to third character after the character pointed to by pmyArray
指针的值可以递增。例如:
pmyArray++; // increment by one position
pmyArray = pmyArray + 1; // increment by one position
pmyArray += 1; // increment by one position
但是,数组名称不是真正的指针变量,它更像是一个指针常量,因此数组名称不能以指针变量可以递增的方式递增。递增指针的好处是实际地址增加了将指针移动到该类型的下一个内存地址的地址所需的字节数。
例如:
char myArray[48];
char *pmyChar = myArray;
short *pmyShort = (short *)myArray; // use cast to assign address of array to pointer
long *pmyLong = (long *)myArray;
使用这些语句,三个不同的指针都将指向同一个内存地址,即字符数组 myArray 开始的地址。但是,如果我们像这样递增这些指针中的每一个:
pmyChar++; // increment by one to next character
pmyShort++; // increment by one to next short
pmyLong++; // increment by one to next long
现在,这些指针中的每一个都将包含不同的地址。指针 pmyChar 将包含字符数组 myArray 的第二个元素的地址,因为 pmyChar 是一个 char 指针,就像 myArray 是一个 char 数组一样。
指针 pmyShort 将包含字符数组 myArray 的第三个元素的地址,因为 pmyShort 是一个短指针,一个 short 包含两个字节(每个 char 为一个字节),而 pmyShort 的递增是通过增加包含在指针变量由 short 的大小而不是 char 的大小。
指针 pmyLong 将包含字符数组 myArray 的第五个元素的地址,因为 pmyLong 是一个 long 指针,一个 long 包含四个字节,而 pmyLong 的递增是通过将指针变量中包含的地址增加 a 的大小来完成的长而不是一个字符的大小。
您还可以有一个指向指针的指针,如下所示:
char myArray[48];
char *pmyArray;
char **pmyPointerToMyArray;
pmyArray = myArray; // pointer to myArray
pmyPointerToMyArray = &pmyArray; // address of pointer to myArray
然后你可以做这样的事情:
pmyArray++; // increment to second element of myArray
*(pmyArray) = 'J'; // set the second element of myArray to letter J
*(*pmyPointerToMyArray) = 'K'; // set the second element of myArray to letter K
最后一条语句的作用是获取 pmyPointerToMyArray 所指向的值,即变量 pmyArray 的地址,然后将该值用作字符的地址来放置字母 K。