Welcome to my blog.|

Khru

园龄:2年11个月粉丝:22关注:1

📂C
2023-03-27 23:02阅读: 26评论: 0推荐: 0

C-指针

指针

每一个变量都有一个内存位置, 每一个内存位置都定义了可使用 & 运算符访问的地址, 它表示了在内存中的一个地址.

指针也就是内存地址, 指针变量是用来存放内存地址的变量.

int a = 1;
int * p = NULL;
p = &a;
printf("变量a的地址为: %p", p);
printf("内存上存储的值为: %d", *p);
// *号: 间接运算符, 也叫解引用运算符, 用来获取对应地址存储的值
*p = 10;
printf("变量a的值为: %d", a); // a = 10

传递指针给函数

通过引用或地址传递参数, 使传递的参数在调用函数中被改变.

#include <stdio.h>
void swap_value(int* v1, int* v2)
{
int temp;
temp = *v1;
*v1 = *v2;
*v2 = temp;
}
int main()
{
int a = 1, b = 10;
swap_value(&a, &b);
printf("a = %d, b = %d", a, b);
return 0;
}

从函数返回指针

允许函数返回指针到局部变量、静态变量和动态内存分配.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int* getRandom()
{
static int r[10];
int i;
/* 设置种子 */
srand( (unsigned)time( NULL ) );
for (i = 0; i < 10; ++i)
{
r[i] = rand();
printf("%d\n", r[i]);
}
return r;
}
int main ()
{
int *p;
int i;
p = getRandom();
for (i = 0; i < 10; i++)
{
printf("*(p + [%d]) : %d\n", i, *(p + i) );
}
return 0;
}

const类型

  • const 在定义指针前面, 不能通过指针改变指向变量的值

    int a = 1, b = 10;
    const int* p = &a;
    *p = 20; // !!!报错!!!
    a = 20; // 可以这样改变值
    p = &b; // 可以改变指针的指向
  • const 在定义指针后面, 不能改变指针的指向

    int a = 1, b = 10;
    int* const p = &a;
    *p = 20; // 可以改变值
    p = &b; // !!!报错!!!
  • const 在定义指针的前面和后面, 兼顾以上两种

    int a = 1, b = 10;
    const int* const p = &a;
    *p = 20; // !!!报错!!!
    p = &b; // !!!报错!!!

本文作者:Khru

本文链接:https://www.cnblogs.com/khrushchefox/p/17263413.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Khru  阅读(26)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起