c/c++指针入门学习

c/c++指针入门学习

指针的的使用

指针就是数据所在的内存地址,通过指针变量可以是操作这块内存地址。

  • 指针声明:type * p;
  • 取地址:&x
  • 取值:*p
  • 修改与访问:*p = 101;
#include <stdio.h>
int main() {
    int a = 10;
    // 1.声明指针变量: type * pointerName;
    int * p;
    // 取地址符号&
    p = &a;
    printf("%d\n",a);   // 10
    // 指针的值即内存地址,一般用十六进制表示
    printf("%x\n",&a);  // abfffd94
    printf("%x\n",p);   // abfffd94
    // 2.访问与修改
    // 取值符号*
    *p = 101;
    printf("%d\n",a);   // 101
    return 0;
}

指针大小

  • 64位-8字节,32位-4字节
// 3.指针占内存大小
printf("size:%d\n",sizeof(p));		// 8
printf("size:%d\n",sizeof(int *));	// 8

空指针-未指向的指针

int * p = NULL;

野指针-非法访问的内存空间

int * p = (int *)0x1100;

const修饰指针

常量指针-指针的指向不可以改,指针的值可以改

int * a = 10;
const int * p = &a;	// 常量指针
*p = 101; // 可以改
int b = 20;
p = &b;	// 不可以改

指针常量-指针的指向、指针的值都不可以改

int a = 10;
const int * const p = &a;

数组与指针联用

数组是连续存储结构,所以指向数组指针可以++

#include <stdio.h>
int main() {
    int a[10];
    for (int i = 0; i < 10; i++)
        a[i] = i;
    // 用指针访问数组
    int * p = a;
    // 以下代码等价
    //int * p = &a[0]; 
    for (int i = 0; i < 10; i++) {
        printf("a[%d] = %d\t",i,*p);p++;
    }
    return 0;
}

函数与指针传递

指针传递可以修改参数变量的内容

#include <stdio.h>
void swap(int* a,int* b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
int main() {
    int a,b;
    a = 10;
    b = 20;
    printf("%d,%d\n",a,b);	// 10,20
    swap(&a,&b);
    printf("%d,%d\n",a,b);	// 20,10
    return 0;
}

函数、数组与指针联用

数组可以看成是首地址,即数组第一个元素的指针。

int* gen(int n) {
    static int arr[100];
    for (int i = 0; i < n; i++) {
        arr[i] = i;
    } 
    return arr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值