c语言如何写指针显示1,C语言-指针(1)

C语言--指针(一)

100443334.jpg

100443335.jpg

100443336.jpg

100443337.jpg

100443338.jpg

100443339.jpg

100443340.jpg

100443341.jpg

100443342.jpg

100443343.jpg

100443344.jpg

100443345.jpg

100443346.jpg

100443347.jpg

100443348.jpg

100443349.jpg

#import

//交换函数

void swap(int x, int y)

{

printf("x=%d,y=%d",x,y);

int temp = 0;

temp = x;

x = y;

y = temp;

printf("x=%d,y=%d",x,y);

}

//

void swap2(int *x , int *y)

{

//不改地址,改地址对应的值

printf("x=%d,y=%d",*x,*y);

int temp = 0;

temp = *x;

*x = *y;

*y = temp;

printf("x=%d,y=%d",*x,*y);

}

int main(int argc, const char * argv[])

{

//C语言定义指针的时候,喜欢使用p,q,r等;

//类型是int*

//变量名p

//初值NULL恒等于0

// int *p = NULL;

// //打印指针%p

// printf("%p %lu\n",p,sizeof(p));

//

// char *q = 0*1000;

// printf("%p %lu\n ",q,sizeof(q));

#pragma mark---------指针总结

//我们通常所说的指针,指的是指针变量,

//指针变量是存放, 内存地址 (内存编号)的变量.

//32位,8个0或1表示每8位一个字节

//指针占用的内存都一样,指针变量占用的内存不一样

//p和q所占内存一样,因为都是32或64位系统下的首地址,都占那么多,而int,char决定长度不一样,int占四间房,char就占1间房

//取地址符,是知道int a = 3,a值是3, int *P想指向内存中a = 3,这时候有了取地址符&a,就是a的首地址,

// int a = 3;

// int *p = &a;

// printf("p=%p\n",p);

// printf("&a=%p\n",&a);

printf("%d",*p);

//

// char b = 'a';

// char *q = &b;

// printf("%p %lu\n",q,sizeof(q));

//整型等于整型地址,字符型等于字符型地址

//没有谁是猜的地址,&取地址符,去整型,就是整型指针....

//*p 取值符 地址里存放的内容

//取多少字节取决于类型修饰符

// printf("%d \n",*p);//*p 取值运算符 用于获取 指针对应的值

// printf("%d %c\n",*p,*q);

//获取地址两种途径

//第一,直接给地址

//第二,用取值符号&来取

#pragma mark-------------指针变量的赋值,代表指针变量的重指向

//指针变量指向

//指针变量的赋值,代表指针变量的重指向

//注意

//不要让整型指向字符型

//也不要让字符型指向整型

// p = &b;错误

// int a = 10;

// int *p = &a;

// printf("指针p存放的地址: %p 指针p占用的内存空间大小:%lu 这个内存空间里存放的值: %d\n",p,sizeof(p),*p);

// //p自己也占内存

// //它们都放在栈区,一个一个分配内存

// printf("p自己的地址: %p\n",&p);

// int b = 20;

// p = &b;

// printf("指针p保存的新地址:%p 新的内存空间里存放的值 %d\n",p,*p);

#pragma mark-------------指针的算术运算

//只有加减运算

//int * p = &a;

//P++;向高位移动四个字节

//p--;向低位移动4个字节

//p每加一代表加了这么大类型

//p++//向高位移动四个字节

//p+1//没有变

//*(p++)

//*(p+1)

//int * p = &a;仅仅告诉编辑器 p是一个指针

//*p = 20;操作符,取地址对应的值

//p 指针(地址) *p取值 &p地址 &(*P)地址

#pragma mark-------------数组与指针

// int arr[5]={9,2,3,4,5};

// printf("%p\n",arr);

// printf("%p\n",&arr[0]);

// int *p = arr;

// printf("%d\n",*p);

// printf("%d\n",*(p+1));

// printf("---%d\n",p[1]);

// arr[1]=8;//直接改值

// *(p+1)=7;//间接改值

// printf("%d\n",*(p+1));

#pragma mark-------------数组去*号加[]原则,把数字扩出来

// printf("%d\n",*(p+1));

// printf("%d\n",p[1]);

//p[2] *(p+2) arr[2]

// p=arr+3;//指针变量是变量,可以重指向(赋值)

//arr = p;数组名是一个常量指针,不可以改变赋值.

//通过数组元素求数组元素个数,sizeof(a)/4

// short a[4]={3,7,9,1};

// int *p1 = a;

// char *p2 = a;

// printf("%d",*p1);

// printf("%d",*p2);

#pragma mark-------------字符串与指针

//可以操作单个字符, *(p+2)='z';

//也可以操作整个字符串 printf("%s",(p+2));

// char str[]="iPhone";

// char* p = str;

// *(p+2)='z';

// printf("%s",(p+2));

#pragma mark-------------指针数组

//存放指针的数组是指针数组

//常量区

//栈区.拷贝常量区

// char *p1 = "iPhone";

// char *p2 = "Android";

// char *p3 = "win8";

// char *strings[3]={p1,p2,p3};

// char *strings[3]={"iphone","Android","win8"};

//操作整个字符串

//打印指针数组(指针字符串)

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

// printf("%s ",strings[i]);

// }

// printf("%s,%s,%s",strings[0],strings[1],strings[2]);

//操作单个字符串

// *(strings[1]+4) = 'x';//指向常量,不能赋值

// char c = *(strings[1]+4);

// printf("\n %c",*(strings[1]+4));

// printf("\n %c",strings[1][4]);

//

#pragma mark-------------指针与函数

//改变不了值,因为是你压根没有改变a,b,而是改变它的副本x,y

int a = 10,b = 20;

// swap(a, b);

// printf("%d,%d",a,b);

// int *p = &a;

// int *q = &b;

// swap2(p, q);

//不改地址,改地址对应的值

swap2(&a, &b);

printf("a=%d,b=%d",a,b);

//学好指针,需要多画图

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值