c语言指针%p,C语言 指针

#import

void swap(int x, int y);

void swap(int x, int y) {

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

int temp = x;

x = y;

y = temp;

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

}

void swap1(int *x, int *y);

void swap1(int *x, int *y) {

int temp = *x;

*x = *y;

*y = temp;

}

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

int a = 20, b = 10;

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

//    swap(a, b);

//    printf("a = %d, b = %d\n",a, b);

swap1(&a, &b);

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

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

/*

//指针 指针变量,也是一个变量。TA存储的是地址!!!也就是内存编号。

//指针变量在C语言中通常用 p、q、r来表示

//不管指针变量是什么类型(字符型指针、整型指针、浮点型指针),存放的内容(地址、内存编号)都是相对应变量内存的首地址!!!

//指针变量p的数据类型为 int *,代表的是p是一个整型指针。

int *p = NULL;

int a = 10;

a = 20;

int b = 30;

//C语言中的取地址符 为 &。

p = &a;

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

p = &b;

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

printf("%d\n",a);//直接访问a存储的值

//C语言中的取值符 为 *

printf("%d\n",*p);//通过指针变量访问 称为间接访问

*/

/**

*  * 在 指针模块中需要特别注意

1、当* 出现在 声明指针变量时,仅仅代表修饰符,说明声明的变量是一个指针变量 int *p = NULL;

2、当* 单独拿出来与指针变量结合使用时,代表取值!将指针变量指向的变量中保存的值取出来!*p

*/

/*

char c = '1';

char *q = &c;

//不管是什么类型的指针变量,存放的都是首地址,就一个内存编号。指针变量的内存大小,只与操作系统有关!!!

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

//打印指针变量采用%p来占位

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

*/

/*

int a = 20, b = 10;

int *p = &a;

printf("指针变量p所占内存空间为%lu, 指针变量p存储的内容为%p, 指针变量指向的变量中存储的值为%d\n",sizeof(p), p, *p);

//重指向

p = &b;

printf("指针变量p所占内存空间为%lu, 指针变量p存储的内容为%p, 指针变量指向的变量中存储的值为%d\n",sizeof(p), p, *p);

*/

//指针的算数运算,指针算数运算只有加减,没有乘除。

/*

int a = 20, b = 10;

int *p = &b;

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

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

printf("+++%d %p %p\n",*p, p, &a);

*/

/*

int a = 20;

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

int *p = &a;

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

int b = 10;

p = &b;

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

*/

/*

//指针与数组,数组是不能直接赋值的,数组如果直接赋值,相当于改变了数组的首地址,只是第一个元素的地址发生了改变,其他元素地址并没有发生改变!!!

int array[5] = {1, 2, 3, 4, 5};

int *p = array;

//    p[1],array[1],*(p + 1),*(array + 1);

printf("array = %p, &array[0] = %p\n",p, &array[0]);

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

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

*/

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

//    int    *p1 = a;

//    char   *p2 = a;

/*

//指针与字符串(字符数组)

char strings[10] = "iPhone";

char *p = strings;

*(p + 1) = 'V';

printf("%s\n",p);

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

printf("%s\n",p + 3);

char *q = "iPhone6sPlus";

printf("%s\n",q);

printf("%c\n",*(q + 1));

//    *(q + 1) = 'V';

printf("%s\n",q);

*/

char string[10] = "iPhone";

char *p = string;

int count = 0;

while (*(p + count ++)) {}

/*

while (*p != '\0') {

count ++;

p ++;

}//此方法有个缺陷,改变了p的指向。

*/

printf("%d\n",count - 1);

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

//指针数组

/*

int *a[2] = {0};

int number = 10;

a[1] = &number;

char *q = "iOS";

char *q1 = "Android";

char *q2 = "Windows";

char *strs[3] = {"iOS", "Android", "Windows"};

printf("%c\n",*(strs[1] + 2));

char *strings[3] = {q, q1, q2};

printf("%c\n",*(q1 + 2));

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

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

}

*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值