栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

指针的声明和使用

指针的声明一般形式为:

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

int *ip;

double *dp;

float *fp;

char *ch;

实例:

#include
#include
const int MAX = 3;

int main(void)
{

    int  num = 18;
    int* ap;
    ap = #

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

    return 0;
}

指针与数组:

int array[10];

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

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

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

实例:

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

    return 0;
}				

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

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

#include 
#include 
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: %dn", num1);
	printf("Value of num2: %dn", num2);
	return 0;
}
函数指针和回调函数:
#include 
#include 
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 = %fn", 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所指向的数据。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889649.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号