//
// main.c
// Point
//
// Created by Kenshin Cui on 14-7-05.
// Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a=1;
int *p;
p=&a; //也可以直接给指针变量赋值:int *p=&a;
printf("address(a)=%x,address(p)=%x\n",&a,p); //结果:address(a)=5fbff81c,address(p)=5fbff81c
printf("a=%d,p=%d\n",a,*p); //结果:a=1,p=1
*p=2;
printf("a=%d,*p=%d\n",a,*p); //结果:a=2,p=2
int b=8;
char c= 1;
int *q=&c;
printf("address(b)=%x,address(c)=%x\n",&b,&c);//结果:
printf("c=%d,q=%d\n", c, *q); //结果:c=1,q=2049,为什么q的值不是1呢?
return 0;
}
//
// main.c
// Point
//
// Created by Kenshin Cui on 14-7-05.
// Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//
#include <stdio.h>
void changeValue(int a[]){
a[0]=2;
}
void changeValue2(int *p){
p[0]=3;
}
int main(int argc, const char * argv[]) {
int a[]={1,2,3};
int *p=&a[0]; //等价于:*p=a;
printf("len=%lu\n",sizeof(int));//取得int长度为2
//指针加1代表地址向后挪动所指向类型的长度位(这里类型是int,长度为2)
//也就是说p指向a[0],p+1指向a[1],以此类推,所以我们通过指针也可以取出数组元素
for(int i=0;i<3;++i){
//printf("a[%d]=%d\n",i,a[i]);
printf("a[%d]=%d\n",i,*(p+i));//由于a就代表数组的地址,其实这里还可以写成*(a+i),但是注意这里*(p+i)可以写成*(p++),但是*(a+i)不能写成*(a++),因为数组名是常量
}
/*输出结果:
a[0]=1
a[1]=2
a[2]=3
*/
changeValue(p); //等价于:changeValue(a)
for(int i=0;i<3;++i){
printf("a[%d]=%d\n",i,a[i]);
}
/*输出结果:
a[0]=2
a[1]=2
a[2]=3
*/
changeValue2(a); //等价于:changeValue2(p)
for(int i=0;i<3;++i){
printf("a[%d]=%d\n",i,a[i]);
}
/*输出结果:
a[0]=3
a[1]=2
a[2]=3
*/
return 0;
}
//
// main.c
// Point
//
// Created by Kenshin on 14-7-05.
// Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[]) {
char a[]="Kenshin";
printf("%x,%s\n",a,a);//结果:5fbff820,Kenshin,同一个变量a是输出字符串还是输出地址,根据格式参数而定
printf(a); //结果:Kenshin
printf("\n");
char b[]="Kenshin";
char *p=b;
printf("b=%s,p=%s\n",b,p);//结果:b=Kenshin,p=Kenshin
//指针存储的是地址,而数组名存储的也是地址,既然字符数组可以表示字符串,那么指向字符的指针同样也可以,如下方式可以更简单的定义一个字符串
char *c="Kenshin"; //等价于char c[]="Kenshin";
printf("c=%s\n",c); //结果:c=Kenshin
return 0;
}
//
// main.c
// Point
//
// Created by Kenshin Cui on 14-06-28.
// Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//
#include <stdio.h>
char * toUpper(char *a){
char *b=a; //保留最初地址,因为后面的循环会改变字符串最初地址
int len='a'-'A'; //大小写ASCII码差值相等
while (*a!='\0') { //字符是否结束
if(*a>'a'&&*a<'z'){//如果是小写字符
*(a++) -= len; //*a表示数组对应的字符(-32变为小写),a++代表移动到下一个字符
}
}
return b;
}
int main(int argc, const char * argv[]) {
char a[]="hello";
char *p=toUpper(a);
printf("%s\n",p); //结果:HELLO
return 0;
}
//
// main.c
// Point
//
// Created by Kenshin Cui on 14-6-28.
// Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//
#include <stdio.h>
int operate(int a,int b,int *c){
*c=a-b;
return a+b;
}
int main(int argc, const char * argv[]) {
int a=1,b=2,c,d;
d=operate(a, b, &c);
printf("a+b=%d,a-b=%d\n",d,c);//结果:a+b=3,a-b=-1
return 0;
}
//
// main.c
// Point
//
// Created by Kenshin Cui on 14-6-28.
// Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//
#include <stdio.h>
int sum(int a,int b){
return a+b;
}
int sub(int a,int b){
return a-b;
}
//函数指针作为参数进行传递
int operate(int a,int b,int (*p)(int,int)){
return p(a,b);
}
int main(int argc, const char * argv[]) {
int a=1,b=2;
int (*p)(int ,int)=sum;//函数名就是函数首地址,等价于:int (*p)(int,int);p=sum;
int c=p(a,b);
printf("a+b=%d\n",c); //结果:a+b=3
//函数作为参数传递
printf("%d\n",operate(a, b, sum)); //结果:3
printf("%d\n",operate(a, b, sub)); //结果:-1
return 0;
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有