C语言
写在前面:
这是一篇指针入门的随笔,因为我自己在学习C,其中我感觉(当然也有很多人说)指针是C的灵魂,也是C中的难点之一,因为自己在学习的过程中经常会搞不懂指针指向的对象是什么,所以经常会读不懂程序,所以我感觉有必要写一点东西,对指针做一个梳理,总结。这也是一个提高的过程,因为是新手,所以对指针理解还不是很透彻,如有错误,还请指教。
1.初识指针
简单来说,指针就是地址,而地址,就是在内存中存储变量的地方。所以说,一个指针就可以指向存储某个变量的地址,从而使程序能够调用这个变量。
与C中的其他类型的变量一样,在使用指针之前一定要先定义指针。指针的定义形式是:
类型定义符* 指针变量名; 或 类型定义符 *指针变量名;
例如:int *p;这里就是定义了指向一个整形变量的指针p,在这个指针p中可以存放任一个int类型的变量的地址,也就是说,这个指针p可以指向任一个int形变量。需要需要强调的是,因为指针指向的是一个地址,所以在内存中指针的值都是整数,所以显然指针的类型并不是说指针本身的类型,而是说指针所指向的变量的类型。例如:int *p; 这里指针所能指向的变量类型是整形,所以指针的类型是整形。。又如char *p;这里指针指向的是字符型变量,所以指针的类型就是字符型。一种类型的指针只能指向同一种类型的变量,而不能指向其他非同类的变量。此外,定义格式中的*并不是指针变量的一部分,*的存在只是告诉编译器这个变量是一个指针变量,而不是其他的普通变量。
2.两个变量符
取址运算符 & 取值运算符 *
1.取址运算符&
因为指针指向的是地址,所以在给指针赋值的时候,赋的值也是地址,这时候就需要用&符号来取出变量的地址。例如p = &a;就是把变量a的地址赋给了指针p。scanf()中的&就是取址运算符。
2.取值运算符*
接上,在将a的地址赋给p之后,如果要用到a的值,就需要使用*也就是说*p就是将指针p所指向的地址的值取出来,所以*p == a;。所以在C语言中,*p和a就完全等价了。
在定义时,如果要在定义时就对指针赋值,即用一条语句完成指针的定义并赋值,可以这样做:int x,*p = &x;这里的*p==&x;就是既定义又赋值。
C语言
写在前面:
这是一篇指针入门的随笔,因为我自己在学习C,其中我感觉(当然也有很多人说)指针是C的灵魂,也是C中的难点之一,因为自己在学习的过程中经常会搞不懂指针指向的对象是什么,所以经常会读不懂程序,所以我感觉有必要写一点东西,对指针做一个梳理,总结。这也是一个提高的过程,因为是新手,所以对指针理解还不是很透彻,如有错误,还请指教。
1.初识指针
简单来说,指针就是地址,而地址,就是在内存中存储变量的地方。所以说,一个指针就可以指向存储某个变量的地址,从而使程序能够调用这个变量。
与C中的其他类型的变量一样,在使用指针之前一定要先定义指针。指针的定义形式是:
类型定义符* 指针变量名; 或 类型定义符 *指针变量名;
例如:int *p;这里就是定义了指向一个整形变量的指针p,在这个指针p中可以存放任一个int类型的变量的地址,也就是说,这个指针p可以指向任一个int形变量。需要需要强调的是,因为指针指向的是一个地址,所以在内存中指针的值都是整数,所以显然指针的类型并不是说指针本身的类型,而是说指针所指向的变量的类型。例如:int *p; 这里指针所能指向的变量类型是整形,所以指针的类型是整形。。又如char *p;这里指针指向的是字符型变量,所以指针的类型就是字符型。一种类型的指针只能指向同一种类型的变量,而不能指向其他非同类的变量。此外,定义格式中的*并不是指针变量的一部分,*的存在只是告诉编译器这个变量是一个指针变量,而不是其他的普通变量。
2.两个变量符
取址运算符 & 取值运算符 *
1.取址运算符&
因为指针指向的是地址,所以在给指针赋值的时候,赋的值也是地址,这时候就需要用&符号来取出变量的地址。例如p = &a;就是把变量a的地址赋给了指针p。scanf()中的&就是取址运算符。
2.取值运算符*
接上,在将a的地址赋给p之后,如果要用到a的值,就需要使用*也就是说*p就是将指针p所指向的地址的值取出来,所以*p == a;。所以在C语言中,*p和a就完全等价了。
在定义时,如果要在定义时就对指针赋值,即用一条语句完成指针的定义并赋值,可以这样做:int x,*p = &x;这里的*p==&x;就是既定义又赋值。
浙公网安备 33010602011771号