从*p++说指针,数组,结构和函数

本文探讨了指针的使用,如*p++的实际含义,以及在函数调用中如何通过指针改变变量值。讲解了strlen的实现原理,并强调了在函数中改变指针变量应使用二级指针。还提到了函数返回指针的两种方式,并指出不应返回局部变量的地址。此外,讨论了C99标准下局部变量的作用域变化,以及在不同编译环境下指针的大小问题。
摘要由CSDN通过智能技术生成

说明文中*p++和*s++都是一个东西,不做字面上的统一了。

因为右结合性,*p++ 其实就是 *(p++) 


1.strlen的实现

#include <stdio.h>
main(){
	char str[]= "Abcde";
	printf("\n string = %s length = %d \n",str,str_length(str));
}

int str_length (const char *s){
	int length = 0;
	while (*s++){
		length++;
	}
	return (length);
}
其实*s++的过程




递增到最后一位就是\0,也就是“”.


注意:*s已经指向后面的内容了,就是乱码了



2.数组和指针这2种方式表示字符串的差异
#include <stdio.h>
main( )
{
	char  str[]= "Abcde";
	char*  ptr = "12345";
	*ptr++;
	printf ("\n string = %s length = %d \n",ptr,str_length (ptr));
	printf ("\n string = %s length = %d \n",str,str_length (str));
}

int str_length (const char  *s)
{
	int length = 0;
	while (*s++)
	{
		length++ ;
	}
	return (length) ;
}
输出:


2.1 数组不能直接当指针用, 数组名不能指针运算
也就是说数组名代表数组的首元素,它是一个指针常量,它的值在程序运行期间是固定不变的,  *str++是不可以的;
ptr是指针变量当然可以实现ptr++的运算但是指针自然可以指针运算。


直接数组名++就报错了:


2.2 数组名不能直接赋值,但是指针可以

给数组名赋值就报错了:


第1次指针地址是:0x010f5860
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值