学习笔记—C语言基础篇05

一级指针:指向变量的地址
指针存放的是变量在内存中的地址编码;
指针的大小在32位情况下大小都是4字节;
野指针:指针变量指向了一个未知的空间,如果操作该空间可能会报错
0-255都是被操作系统占用的只读内存空间;
通过操作野指针改变内容可能会导致程序异常: ( int* p = 10野指针; *p = 10操作地址对应的内容;)
void*:万能指针可以指向任意类型变量的地址
void* 指针名 = & 常量;
void* 类型变量在通过地址操作变量的值,需要强制转换为相同类型的指针
const:定义常量
const定义的变量可通过指针修改其值,所以不安全
const int a = 10;
int* pa = &a;
*pa = 100;
const修饰靠最近的
int a = 10;
int b = 20;
int c = 30;
const int* pa = &a; //修饰int* 不能改变指针指向的地址的值
//*pa = 100; 不能被修改
int* const pb = &b; //修饰pb,不能修改指针的值
//pb = &c;不能被修改
const int* const pc = &c;//都不能修改但可以通过二级指针进行修改
数组与指针
数组的下标具有降级的功能,相当于解引用;
数组名就是数组的首地址 是一个常量,可以参与运算但不能被赋值
数据类型* 指针名 = 数组名 可以通过指针来操作数组;
注意指针数据类型必须与数组数据类型相同
int arr[]={1,2,3,4,5,6,7};
int* p = arr;              | int* p = &arr;(二级指针)
*(p++) = arr[1];        |p++->跨过整个数组空间
指针数组 int* p[3] 数组里面的每一个元素都是一个指针
数组指针 int (*P)[3] 一个指向数组地址的指针
#include <stdio.h>
#include <string.h>

int main()
{
      int arr1[] = {60,60,60};
      int arr2[] = {70,70,70};
      int arr3[] = {80,80,80};

      int* parr[] = {arr1,arr2,arr3};
      int sum = 0;
      for(int i = 0; i < 3;i++)
      {
            for(int j = 0; j < 3; j++)
                  sum += *(*(parr + i) + j);//方法1
                  //sum += *(parr[i] + j);//方法2
                  //sum += parr[i][j];//方法3
      }
      printf("%d ",sum);
      system("pause");
      return 0;
}
/
char ch1[] = "hello";//字符串以'\0'结束
char* p = &ch1+1;
printf("%c\n",*(p - 2));
输出‘o’;

char ch1[] = "habchello";//字符串以'\0'结束
int* p = &ch1+1;
printf("%c\n",*(p - 2));
输出‘b’
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值