C语言基础学习(7) 指针

#include <stdio.h>
void interchange2(int , int);
void interchange1(int * u, int * v);
int main(void)
{

    int x = 5, y = 89;
    printf("  x = %d,  y = %d \n", x, y);
    interchange2(x,y);
    printf(" x2 = %d,  y2 = %d \n", x, y);
    interchange1(&x, &y);
    printf(" x1 = %d, y1 =%d \n", x, y);

    return 0;
}

void interchange1(int * u, int * v)
{
    int temp;

    temp = *u;
    *u = *v;
    *v = temp;
    return 0;

}

void interchange2(int u, int v)
{
    int temp;

    temp = u;
    u = v;
    v = temp;
    return 0;

}

函数1只是在形参交换数据,数据2可以对主函数中的实参值进行交换

数组的指针表示

/**  sum.c 求数组中元素之和  */

#include <stdio.h>
#define SIZE 10

int sum(int * start, int * end);
int main(void)
{

    int marbles[SIZE] = { 12, 32, 2, 35, 89, 2, 34, 90, 13, 30};
    long answer;
    answer = sum(marbles, marbles + SIZE);//数组表示,开始和结束
    printf("******  %ld ********", answer);
    return 0;
}

int sum(int * start, int * end)
{
    long total = 0;
    while(start < end){

        total += *start;
        start++;
    }

    return total;

}

1)sum(int marbles[], int)//第一个[]是地址,第二个元素个数
2)sum(int * start, int * end) //第一个是start数组首地址元素,第二个是结束地址

不要解引用未初始化的指针

int * pt; // 未初始化的指针
*pt = 5; // 严重错误
系统创建一个指针时候只分配了储存指针本身的内存,未分配储存数据内存

指针常量与常量指针

指针常量就是指针不可变,而指向内容却可以改变(必须初始化)int * const p;
常量指针就是指针可变,但指向常量不可改变(不必初始化)int const * p, const int * p;

int (*ptr)[3]

int (* ptr) [3]:表示ptr是一个指向数组的指针,数组的每个元素含有3个数组元素,也就是3代表数组的列
int(*ptr) [N],N代表的是数组的列。编译器要知道指针指向的数组元素包含多少元素,也就是N

传递函数形参

void sum(int (*pt)[N]);
等价于:
void sum(int pt[][N]); []代表pt是一个指针

void sum(int pt[3][N]);有效,但3将被忽略

int ref[] = {1, 2, 3, 21};
int * pt;
ref + 1// 合法
ref++// 不合法,因为ref值是常量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值