指針是程序數據在內存中的地址,而指針變量是用來保存這些地址的變量。
定義指針變量
C語言中,定義變量時,在變量名 前 寫一個 * 星號,這個變量就變成了對應變量類型的指針變量。必要時要加( ) 來避免優先級的問題。
既然有了指針變量,那就得讓他保存其它變量的地址,使用& 運算符取得一個變量的地址。
指針變量的大小:32位操作系統占4個字節,64位操作系統占8個字節
指向數組元素的指針 支持 遞增 遞減 運算。(實質上所有指針都支持遞增遞減 運算 ,但只有在數組中使用才是有意義的)
將a的值修改成為5
&n為傳出參數,通過scanf函數內部往外部參數n中寫入一個值。
#include <stdio.h> #define log(func){\ printf("%s = %d\n",#func,func);\ } struct Data { int x, y; }; int main() { struct Data a[2], *p = a; a[0].x = 0, a[0].y = 1; a[1].x = 2, a[1].y = 3; // a[1].x log((a + 1)->x); log((p + 1)->x); log((&a[0] +1)->x); log((&p[0] + 1)->x); log(p[1].x); log((*(a + 1)).x); log((*(p + 1)).x); log((*(&a[0] + 1)).x); log((*(&p[0] + 1)).x); return 0; }
函數指針
函數返回值類型 (* 指針變量名) (函數參數列表);
Main函數參數
int argc 命令行參數個數,
argv存儲命令行參數內容
env當前環境變量,二維字符數組
#include <stdio.h> void output(int argc, char * argv[], char *env[]) { printf("argc = %d\n", argc); for (int i = 0; i < argc; i++) { printf("argv[%d] = %s\n", i, argv[i]); } for (int i= 0; env[i]; i++){ printf("env[%d] = %s\n", i, argv[i]); } return; } int main(int argc, char *argv[], char *env[]) { output(argc, argv, env); return 0; }