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;
}
posted @ 2021-08-17 10:22  yiwenzhang  阅读(728)  评论(0编辑  收藏  举报