先分享个参考链接:
从5个维度来看C语言指针(指针就是个纸老虎)
各位看官耐心看完上面这篇就好,不用看我的,楼上的大佬讲的很细很好理解了。
我写博客就是记录一下学习过程(好记性不如烂笔头),可惜我感觉自己还是没能理解到精髓也不知道怎么表述,只能理解多少讲多少吧,讲个大概咯。
多尝试用指针多撸代码吧。
然后上我的测试代码:
#include <stdio.h>
int main(void)
{
int *pNumber = 1;
int number = 2;
int array[3] = {1,2,3};
int i, j, k;
printf("pNumber自身的地址是:0X%x\n", &pNumber);/**< '&'取地址符,取指针变量pNumber的地址 */
printf("pNumber自身的数值是:0X%x\n", pNumber);/**< */
printf("==============================================================================================\n");
printf("number自身的地址是:0X%x\n", &number);/**< */
printf("number自身的数值是:0X%x\n", number);/**< */
printf("==============================================================================================\n");
printf("array自身的首地址是:0X%x\n", array);/**< */
for (i = 0; i < 3; i++)
{
printf("array[%d]自身的数值是:0X%x,array[%d]自身的地址是:0X%x\n", i, array[i], i, &array[i]);/**< */
}
printf("==============================================================================================\n");
pNumber = number;
printf("pNumber = number后:pNumber自身的数值是:0X%x,自身的地址是:0X%x\n", pNumber,&pNumber);/**< */
pNumber = &number;
printf("pNumber = &number后:pNumber自身的数值是:0X%x,自身的地址是:0X%x\n从该指针变量存放的数值(地址值)取值:0X%x\n", pNumber, &pNumber, *pNumber);/**< */
pNumber = array;
printf("pNumber = array后:pNumber自身的数值是:0X%x,自身的地址是:0X%x\n", pNumber, &pNumber);/**< */
for (j = 0; j < 3; j++)
{
printf("pNumber[%d] = 0X%x\n", j, pNumber[j]);
}
printf("==============================================================================================\n");
for (k = 0; k < 3; k++)
{
printf("pNumber[%d] = 0X%x\n", k, pNumber + k);/**< 首地址右移k * sizeof(int)个字节 */
printf("pNumber[%d] = 0X%x\n", k, *(pNumber + k));/**< ‘*'取数值符号,从地址中取出其中存放的数值 */
}
return 0;
}
运行结果:
定义一个指针变量(int *pNumber),指针自身有自己的地址(& pNumber),然后在这个地址上,存放有数值(如number的数值2赋值给指针变量pNumber,此时指针变量pNumber的数值就是2;如果是将number的地址值(&number)赋值给指针变量pNumber,那此时指针变量pNumber的数值就是number这个变量的地址值)。
以pNumber = &number
为例:
指针变量存放的数值一般都是其他变量的地址,对这个指针变量存放的值(变量number的地址值0X12ffab8)进行取值操作(*pNumber)可得到该指针变量关联的变量(number)的数值(2)。
个人理解,错了还请指出纠正。