学点 C 语言(20): 数据类型 - 指针
生活随笔
收集整理的這篇文章主要介紹了
学点 C 语言(20): 数据类型 - 指针
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 通過 &變量 可以獲取變量地址:
#include <stdio.h>int main(void) {int num = 10;printf("變量值: %d\n", num);printf("變量址: %d\n", &num);getchar();return 0; }
2. 表示變量地址的變量就是指針:
#include <stdio.h>int main(void) {int num = 10;int *p = #printf("%d, %p\n", num, p);getchar();return 0; }
3. *指針 就如同變量本身是一樣的:
#include <stdio.h>int main(void) {int num = 10;int *p = #printf("%d, %p, %d\n", num, p, *p);*p = 11;printf("%d, %p, %d\n", num, p, *p);(*p)++;printf("%d, %p, %d\n", num, p, *p);num = 99;printf("%d, %p, %d\n", num, p, *p);getchar();return 0; }
4. 聲明指針時要注意初始化, 沒有初始化的指針是危險的:
#include <stdio.h>int main(void) {int n1 = 11;int n2 = 22;int *p = NULL; /* 初始化為空 */p = &n1;printf("%d, %p, %d\n", n1, p, *p);p = &n2;printf("%d, %p, %d\n", n2, p, *p);getchar();return 0; }
5. 為什么沒有初始化的指針是危險的:
#include <stdio.h>int main(void) {int *p;// 上面的指針 p 沒有初始化話, 但它也有個垃圾地址printf("%p\n", p);// 此時如果給它賦值, 誰知道會覆蓋了什么?//*p = 100; /* 不要執行這個 */getchar();return 0; }
6. 指向常量的指針: 不能通過指針修改它指向的值, 但該值可以通過其變量修改
#include <stdio.h>int main(void) {int n1 = 111;int n2 = 222;const int *p = &n1; /* 注意 const 的使用 */printf("%d, %p, %d\n", n1, p, *p);n1 = 333;//*p = 333; /* 不可以這樣, 因為現在的指針是常量 */printf("%d, %p, %d\n", n1, p, *p);p = &n2; /* 可以改變指針的指向 */printf("%d, %p, %d\n", n2, p, *p);getchar();return 0; }
7. 常量指針: 鎖定指針的指向
#include <stdio.h>int main(void) {int n1 = 111;int n2 = 222;int *const p = &n1; /* 注意 const 的使用 */printf("%d, %p, %d\n", n1, p, *p);n1 = 333;//*p = 333; /* 不可以這樣, 因為現在的指針是常量 */printf("%d, %p, %d\n", n1, p, *p);// p = &n2; /* 現在不可以改變指針的指向了 */ // printf("%d, %p, %d\n", n2, p, *p);getchar();return 0; }
8. 指針是有類型的:
#include <stdio.h>int main(void) {long n = 100L;float f = 1.5f;double d = 3.14159265;long *p1 = &n;float *p2 = &f;double *p3 = &d;printf("%ld\n", *p1);printf("%g\n", *p2);printf("%.8f\n",*p3);getchar();return 0; }
9. 令人迷惑的指針定義:
到底應該怎樣寫:
int *p;
int * p;
int* p;
因為 C 語言忽略空白, 這些都是對的, 但下面的例子會說明哪個更好:
#include <stdio.h>int main(void) {int n1, n2, *p; /* 定義了兩個整數(n1、n2), 和一個整數指針(p) */n1 = 111;n2 = 222;p = &n1;printf("%d, %p\n", *p, p);p = &n2;printf("%d, %p\n", *p, p);getchar();return 0; }
轉載于:https://www.cnblogs.com/del/archive/2008/11/27/1342542.html
總結
以上是生活随笔為你收集整理的学点 C 语言(20): 数据类型 - 指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 文件下载,中文表名,中文内容
- 下一篇: Ruby中require,load,和i