C语言入门-学习笔记(记录指针的用法)

本文详细介绍了C语言中的指针概念,包括指针的声明和使用,如`int*ip`等。通过实例展示了指针如何与数组交互,以及如何作为参数传递给函数实现传址操作。此外,还提到了函数指针和回调函数的应用,如`calc`函数的使用。最后,文章讨论了不同类型的指针常量,如`const char*prt`等的区别。
摘要由CSDN通过智能技术生成

文章主要记录C语言的学习笔记。

指针:可以保存地址值(指针)的变量称为指针变量,因为指针变量中保存的是某变量的地址值。

指针的声明和使用

指针的声明一般形式为:

type *var_name;
在这里,type 是指针的基类型,它必须是一个有效的 C 数据类型,var_name 是指针变量的名称。星号是用来指定一个变量是指针。声明的指针类型必须要与所指向的变量的类型一致。

int *ip; /* 一个整型的指针 */

double *dp; /* 一个 double 型的指针 */

float *fp; /* 一个浮点型的指针 */

char *ch; /* 一个字符型的指针 */

实例:

#include<string.h>
#include<stdio.h>
const int MAX = 3;

int main(void)
{

    int  num = 18;
    int* ap;
    ap = &num;

    printf("Value of num= %d\n", *ap);
    printf("Value of num= %p\n", ap);
    printf("Value of num= %p\n", &num);
    printf("ap 存储大小 : %lu \n", sizeof(ap));

    return 0;
}


指针与数组:

int array[10];

1、定义一个数组array[10],该数据类型可以理解为10个整型变量的集合,那么array表示的是指向该数组的起始位置,那么array的数据类型就是“指向int的常量指针”,如果声明的是其他类型的数组名,那么数据类型就是“指向其他类型的常量指针”。

2、对数组内的元素进行访问,可以互换的使用“指针表达式”或者“下表表达式”

但是,在编程的过程中注意array的值是一个常量地址,不能被修改,也不能被作为左值去被赋值。

实例:

#include<string.h>
#include<stdio.h>
const int MAX = 3;

int main(void)
{

    int  array[5] = {1,2,3,4,5};
    int* ap;
    ap = array;

    for (int i = 0; i < 5; i++)
    {
        printf("Value of array[%d] = %d\n",i,*ap);                           //采用指针的方式进行访问
        ap++;                                                                //指针可以被赋值,每次++表示向后移动了4个字节   
        printf("Value of array[%d] = %d\n",i,*(array + i));                  //采用指针的方式进行访问,作为指针常量不能被赋值
        printf("Value of array[%d] = %d\n",i,array[i]);                      //采用下标的方式进行访问
       
    }
    printf("ap 存储大小 : %lu \n", sizeof(ap));
    printf("array 存储大小 : %lu \n", sizeof(array));

    return 0;
}				

指针作为形参传递给函数:

实例:指针作为形参传递给函数,若在函数内部指针所指向的地址的值被改变,相当于改变了函数外部实际的值,该函数传参方式为传址操作。也可以使用数组进行传址操作。

#include <stdio.h>
#include <time.h>
void swap(int* num1, int* num2)
{
	int temp;
	temp = *num1;
	*num1 = *num2;
	*num2 = temp;
}
int main()
{
	int num1 = 5;
	int num2 = 10;

	swap(&num1, &num2);

	/* 输出实际值 */
	printf("Value of num1: %d\n", num1);
	printf("Value of num2: %d\n", num2);
	return 0;
}

函数指针和回调函数:

#include <stdio.h>
#include <time.h>
float Add(float num1, float num2)
{
	float result = num1 + num2;
	return result;
}
float Sub(float num1, float num2)
{
	float result = num1 - num2;
	return result;
}
float mult(float num1, float num2)
{
	float result = num1 * num2;
	return result;
}
float Div(float num1, float num2)
{
	float result = num1 / num2;
	return result;
}
void calc(float num1, float num2, float(*pFuction)(float, float))
{
	float result = pFuction(num1, num2);
	printf("Value of Calc = %f\n", result);
}
int main()
{
	float num1 = 5.5;
	float num2 = 10.36;

	calc(num1,num2, Add);
	calc(num1, num2, Sub);
	calc(num1, num2, mult);
	calc(num1, num2, Div);
	return 0;
}

White Board:const char* prt ,char const *prt ,char *const prt ,const char *const prt 的区别。

const char*prt :表示为定义一个指向常量的指针,可以指向常量也可以指向变量,*prt不可通过指针去修改,prt可以被改变,重新指向一个新的常量地址。(char const *prt 一样)

const char*prt = array:表示为定义一个指向char类型的常量指针,定义的时候必须被初始化,prt被const所修饰,故prt不可被修改,但可以通过指针prt去修改所指向的数据*prt。

const char*const prt = array:表示不予许prt被修改,也不予许修改prt所指向的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值