2024-10-30【C指针】

3.指针的值


指针所指向的内存区或地址

4.指针本身所占的内存大小


只要用函数sizeof(指针的类型)

int _ptr;

sizeof(int_);

运算符


&是取地址运算符,*是间接运算符。

“ & ”和“ * ”都是右结合的。

假设有变量 x = 10

则*&x 的含义是:

先获取变量 x 的地址,再获取地址中的内容。

因为“&”和“*”互为逆运算,所以 x = *&x。

初始化初始化:


利用取地址获取 x 的地址,在指针变量 px 定义时,赋值给 px

int x;

int *px = &x;

定义指针变量,分别赋值“NULL”和“0”

int *p1= NULL, *p2 = 0;

此时的“0”含义并不是数字“0”,而是 NULL 的字符码值。

这种初始化的方式表示其目前还未指向任何对象。

int a = 100, b;

int *p = &a;

int *p2 = NULL;

p2 = &a;

printf(“%d\n”, *p2);

printf(“%p\n”, p);

printf(“%p\n”, &a);

printf(“%d\n”, *p);

C 指针的算术运算:


int a[] = {1, 2, 100, 4, 5, 6, 7};

int *p = a;

printf(“%d\n”, *p);

printf(“%d\n”, *p++);

printf(“%d\n”, *p);

printf(“%d\n”, *p);

printf(“%d\n”, *++p);

printf(“%d\n”, ++(*p++));

printf(“%d\n”, *p);

printf(“%d\n”, *(p + 3));

printf(“%d\n”, *p + 1);


需要明确一个优先级顺序:()>[]>*

C 指针数组: int *p1[5];


数组存储指向 int 或 char 或其他数据类型的指针。

一个数组的元素均为指针类型数据,称为指针数组。

C 数组指针: int (*p2)[5]; => *(p2[5]);


如果一个指针指向了数组,我们就称它为 数组指针。

int var[3] = {10, 100, 200};

int i, *ptr[3];//指针数组

int (*ptr2)[3];//数组指针

ptr2 = &var;

for (i = 0; i < 3; i++)

{

ptr[i] = &var[i]; /* 赋值为整数的地址 */

}

for ( i = 0; i < 3; i++){

printf(“Value of var[%d] = %d\n”, i, *ptr[i] );

printf(“Value of var[%d] = %d\n”, i, (*ptr2)[i] );

}

}

char name[10][10]= {

“Zara Ali”,

“Hina Ali”,

“Nuha Ali”,

“Sara Ali”,

};

//char name[0];

//char *p = name[0];

const char *names[4] = {

“Zara Ali”,

“Hina Ali”,

“Nuha Ali”,

“Sara Ali”,

};

int i = 0;

for ( i = 0; i < 4; i++){

printf(“Value of names[%d] = %s\n”, i, names[i] );

}

C 指针函数:*p(int, int)


它的本质是一个函数,不过它的返回值是一个指针。

C 函数指针:(*p)(int, int)


函数指针是指向函数的指针。

通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。

int max(int a,int b){

if(a>b)

return a;

else

return b;

}

int *fun(int n){

static int arr[100];//静态变量

//C 不支持在调用函数时返回局部变量的地址,除非定义局部变量为 static 变量。

//static 变量的值存放在内存中的静态数据区,不会随着函数执行的结束而被清除,故能返回其地址。

int i;

for (i = 0; i < n;i++){

arr[i] = i;

}

return arr;//返回了指针

int (*p)(int, int) = &max;//函数指针

int a = 10, b = 5;

printf(“最大数为:%d\n”, p(a, b));

//等价于max(a,b);

int n = 10;

int *p1;

p1 = fun(n);

int i;

for (i = 0; i < n;i++){

printf(“%d\n”, *(p1 + i));

}


编写一个函数实现:将字符串中的字符以逆序形式存放。

在main函数中输入这个字符串,调用函数逆序存放,输出变化后的字符串

(要求:形参是指针类型变量)。

交换函数

void swap1(int a,int b){

int t;

if(a<b){

t = a;

a = b;

b = t;

}

printf(“%d %d\n”, a, b);

}

void swap(int *a,int *b){

必看视频!获取2024年最新Java开发全套学习资料 备注Java

最后

这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档

祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!

感谢大家的支持!!

image.png

void swap(int *a,int *b){

必看视频!获取2024年最新Java开发全套学习资料 备注Java

最后

这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档

祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!

感谢大家的支持!!

[外链图片转存中…(img-YIqWZOtp-1716380396214)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值