您的位置:首页 > 其它

指针与const

2013-04-18 22:13 190 查看
#include <stdio.h>
#include <string.h>

typedef struct node
{
int next;
int data;
}*Node;

void modify(Node l)
{
printf("l = %d, &l = %u\n",l,&l);
l->data = 1;
l->next = 1;
(*l).data = 10;
(*l).next = 100;
}

Node MM(Node l)
{
l = new node;
l->data = 2;
l->next = 2;
return l;
}

void M(Node *l) //二维指针
{
(*l) = new node;
(*l)->data = 12;
(*l)->next = 12;
}
void fun1(char *pa) //相当于传值
{
//相当与char *tmp = pa;
printf("&pa = %u pa %d pa = %s\n", &pa, pa,pa);
pa = "ni,mei"; //只是更改了tmp的值
printf("%u %d %s\n", &pa, pa,pa);
}

void fun2(char **pa) //传递pa的地址
{
*pa = "nimie"; //指向pa char *指针
}

void int1(int *p)
{
*p = 100;

}

int main( )
{
//下面这个等价
const char *p;
char const *q;
// "hello" 为字符串常量 const char [5]
char *c1 = "hello";
char *tt;
tt = c1;
// tt为char *指针
// *tt 为char 指向内存单位为tt的第一个字符
tt = "wawa";
char *const l = tt;  //对与这种只能在初始化时赋值
const char * const m = "haha";  //指向const对象的const指针
char c2[20] = "world";
char c3[15];
// 不能这样赋值, c3 = "haha",
p = c1;
q = c2;
printf("%s\n%s\n%s\n%s\n",p,q,m,l);

int st = 10;
int *pp = &st;
printf("int %u %d\n",pp, *pp);

char *pa = "now";
printf("&pa = %u pa = %d %s\n",&pa, pa, pa);
printf("函数1:\n");
printf("修改之前:%s\n",pa);
fun1(pa);  //这里相当于值传递
printf("修改之后:%s\n", pa);

printf("函数2:\n");
printf("修改之前:%s\n",pa);
fun2(&pa);
printf("修改之后:%s\n", pa);

Node ps = new node;
printf("ps = %d, &ps = %d\n",ps,&ps);
/* ps 只是一个指向Node的指针,没有申请内存
ps->data = 2;
ps->next = 2;
*/
printf("%d %d\n",ps->data,ps->next);
modify(ps);
printf("%d %d\n",ps->data,ps->next);

Node pq;
//printf("%d %d\n",ps->data,ps->next);
pq = MM(pq);
printf("%d %d\n",pq->data,pq->next);

//需要用二维指针
Node pl;
M(&pl);
printf("%d %d\n",pl->data,pl->next);

int *ll = &st;
printf("ll = %d\n",*ll);
int1(ll);
printf("ll = %d\n",*ll);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: