c语言学习7-------指针与地址
指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。
定义指针变量
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; }