}
数组、指针、函数参数
形参数组,实参指针
void change(int b[]) {
b[0] = 10;
}
int main()
{
// 定义一个int类型的数组
int a[4] = {1, 2, 3, 4};
int *p = a;
// 将数组名a传入change函数中
change(p);
// 查看a[0]
printf(“a[0]=%d”, a[0]);
return 0;
}
形参指针,实参数组
void change(int *b) {
b[0]= 10;
// 或者*b = 10;
b[1] = 11;
// 或 *(b+1) = 11;
}
int main()
{
// 定义一个int类型的数组
int a[4] = {1, 2, 3, 4};
// 将数组名a传入change函数中
change(a);
// 查看a[0]
printf(“a[0]=%d”, a[0]);
return 0;
} //可以看出,在很多情况下,指针和数组是可以相互切换使用的。但是,并不能说指针就等于数组
用指针遍历字符串的所有字符
charchs[] =“abcde”;
char*p;
p = chs;
for(; *p !=‘\0’;p++)
{
printf(“data:%c “, *p);
}
printf(“\n”);
用指针直接指向字符串
char*p =“abcde”;
strlen(“abde”);
函数在string.h中的声明
size_t strlen(constchar*);
char *strcpy(char*,constchar*);//字符串拷贝函数
char *strcat(char*,constchar*);//字符串拼接函数
int strcmp(constchar*,constchar*);//字符串比较函数
它们的参数都是指向字符变量的指针类型,因此可以传入指针变量或者数组名。
指针指向字符串的其他方式
1chars[10];
2s =“mj”;//编译器肯定报第2行的错,因为s是个常量,代表数组的首地址,不能进行赋值运算
1char*s =“mj”;
2
3*s =“like”;
第3行代码犯了2个错误:
第3行代码相当于把字符串”like”存进s指向的那一块内存空间,由第1行代码可以看出,s指向的是”mj”的首字符’m’,
也就是说s指向的一块char类型的存储空间,只有1个字节,要”like”存进1个字节的空间内,肯定内存溢出
由第1行代码可以看出,指针s指向的是字符串常量“mj”!因此是不能再通过指针来修改字符串内容的!
就算是*s = ‘A’这样”看起来似乎正确”的写法也是错误的,因为s指向的一个常量字符串,不允许修改它内部的字符。c 计算结构体大小
chara[] =“lmj”;定义的是一个字符串变量! char *p = a; *p = ‘L’; 变量可以通过指针改变,常量不行
char*p2 =“lmj”;定义的是一个字符串常量!
返回指针的函数
返回指针的函数的一般形式为:类型名*函数名(参数列表)
//将字符串str中的小写字母变成大写字母,并返回改变后的字符串
//注意的是:这里的参数要传字符串变量,不能传字符串常量
char * upper(char *str) {
//先保留最初的地址。因为等会str指向的位置会变来变去的。
char *dest = str;
//如果还不是空字符
while (*str != ‘\0’) {
//如果是小写字母
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-55787-6.html
我们现在最需要的是和平发展的时间
同我们一样
诺列加的前车之鉴你忘了